r2499 - in isis-fish/tags: . isis-fish-3.2.0.5-rc1 isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input isis-fish-3.2.0.5-rc1/src/main/resources isis-fish-3.2.0.5-rc1/src/main/resources/i18n
Author: chatellier Date: 2009-07-16 16:44:13 +0000 (Thu, 16 Jul 2009) New Revision: 2499 Added: isis-fish/tags/isis-fish-3.2.0.5-rc1/ isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties Removed: isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties Log: [maven-release-plugin] copy for tag isis-fish-3.2.0.5-rc1 Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1 (from rev 2478, isis-fish/trunk) Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt =================================================================== --- isis-fish/trunk/changelog.txt 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,304 +0,0 @@ -isis-fish (3.2.0.4-rc2) xxx - * Fix bug 1772 ( https://labs.libre-entreprise.org/tracker/index.php?func=detail&aid=1772&group_id=8&atid=113 ) - * Fix bug 1900 ( https://labs.libre-entreprise.org/tracker/index.php?func=detail&aid=1900&group_id=8&atid=113 ) - * Fix simulation plan subjob number : start at 0 - * Fix bug, database migration asked twice - * Fix VCSSVN getRemoteStatus(), not showed added status file - * Rename "factors" package to "sensitivity" - * Add tests on each storage for testing template content compilation - * Add script templates based on freemarker template engine - -isis-fish (3.2.0.4-rc1) sletellier - - * Fix ask passphrase in svn+ssh mode - * Bugfix release - -isis-fish (3.2.0.3) chemit - - * Change simulation monitoring to work better with SSH launcher - * Update XML-RPC launcher to xmlprc 3 - * Add ssh simulation launcher - * Add Jaxx UI for all interfaces - * Remove SwixAT UI - * switch to lutinproject 3.3 - * switch to topia-service 1.0.1 - * switch to topia-persistence 2.1.1 - * remove tools.jar (now isis need JDK !!!) - -isis-fish (3.2.0.2) chatellier - - * fix missing lutinxml dependencies - -isis-fish (3.2.0.1) chemit - - * all ui are now in src/main/java - * use maven 2 directory layout - * use org.codelutin:lutinproject 3.0 - * passageto UTF-8 - -isis-fish (3.2.0.0) poussin - - * complete refactoring option, vcs - * complete refactoring simulation engin - * new launcher type (subprocess, caparmor ...) in progress - * modify script to use cell and not zone in some computation - * add TechnicalEfficiency equation - * add Inactivity equation support - -isis-fish (3.1.3) stable; urgency=high - - * bug correction when migration failed, still launch application on a new database - * bug correction changing local database in configuration ui has no effect on next launch - * bug correction if no svn connexion, application could not start - * use commandline 0.4 (improve init and user options) - * improve i18n loading (lutinutil) - * refactor init and vcs init - - -- Tony Chemit <chemit at codelutin.com> Fri, 19 Mar 2008 02:02:02 +0200 - - - * bug correction #1605 add annotation on scripts for contextual help - * bug correction #1617 Non prise en compte du changement de base locale - * add new ui for configuration - - -- Tony Chemit <chemit at codelutin.com> Fri, 26 Feb 2008 23:34:02 +0200 - - * bug correction #1601 Exception et erreur apres une simulation - * bug correction #1602 Gros probleme de mise a jour de database entre v3.0 vers 3.1 perte des pecheries - * bug i18n (loose some translate while using Isis-Fish from a jar) - - -- Tony Chemit <chemit at codelutin.com> Fri, 21 Dec 2007 11:34:02 +0200 - - -isis-fish (3.0.22) stable; urgency=high - - * bug correction when launch many simulation with AnalysePlan (OutOfMemory) - now we don't use cglib but javassist - - -- Benjamin Poussin <poussin at codelutin.com> Wed, 7 Nov 2007 21:48:31 +0100 - -isis-fish (3.0.21) stable; urgency=high - - * bug correction in ResultDatastore, bad database used to get result during simulation - * add call to close method on SimulationStorage for in memory database - * bug correction when launch many simulation with AnalysePlan (OutOfMemory) - - -- Benjamin Poussin <poussin at codelutin.com> Wed, 7 Nov 2007 21:48:31 +0100 - -isis-fish (3.0.20) stable; urgency=high - - * add clean temp directory simulation preparation - * add IsisFish version number in parameter - * add getPopulations method in PopulationMonitor - * bug correction #1592 in totalFishingMortality during reduction of matrix - * bug correction #1583 about too many file open - * bug in export script template - * bug correction in rule Cantonnement - * modify database simulation usage, now we use in memory database for - data, and file storage for result, to separate result and data. This - improve performance (70%). - * bug switch to h2 database version 1.0.60, this prevent rollback exception - during simulation - - -- Benjamin Poussin <poussin at codelutin.com> Mon, 15 Oct 2007 11:34:02 +0200 - -isis-fish (3.0.19) stable; urgency=low - - * bug in cache for String and number in parameter - * bug RuleMonitor add Rule as parameter - * add extraRules field in SimulationParameter to permit Analyse Plan to - add rules in parameter - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 06 Jun 2007 15:39:17 +0200 - -isis-fish (3.0.18) stable; urgency=low - - * bug go.bat have correct DOS end of line - * improve build-release.sh to send email to user and devel list after deploy - * bug correction in delete simulation, remove close context at begin of - clear method - * bug permit simulation without SimulationControl - * bug in queue model test if no more simulation to prevent Index Out of - bound Exception - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 24 May 2007 15:39:17 +0200 - -isis-fish (3.0.17) stable; urgency=low - - * add support for filename and extension in export script - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 24 May 2007 15:38:17 +0200 - -isis-fish (3.0.16) stable; urgency=low - - * add ssj jar to have random library - * add support to auto upgrade database (topia migration service) - * bug force reload parameter in thread simulation to prevent class cast - exception because same class is loaded in two different classloader - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 21 May 2007 15:38:17 +0200 - -isis-fish (3.0.15) stable; urgency=low - - * change database lock_mode to permit read with out lock - * change database version to 1.0.20070304 - * bug end line in equation editor - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 06 Apr 2007 15:38:17 +0200 - -isis-fish (3.0.14) stable; urgency=low - - * add beforeOrEquals and afterOrEquals methods to Date and Month - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 02 Apr 2007 15:38:17 +0200 - -isis-fish (3.0.13) stable; urgency=low - - * add simulation information support - * change aspect deployment classloader (not used Agent) - * bug in cache aspect when used without trace aspect - * add checkout maven file option - * change MatrixPanel context menu - * bug in datastore closeContext (nullify storage) - * bug in datastore getStorage (if closed create new) - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 30 Mar 2007 15:38:17 +0200 - -isis-fish (3.0.12) stable; urgency=low - - * bug in cache, help garbage with clear on collection - * add on matrix sumOverDim(dim, start, nb) - * change statistic is not used by default - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 20 Mar 2007 15:38:17 +0200 - -isis-fish (3.0.11) stable; urgency=low - - * add result support in analyse plan - * bug in AnalysePlanContext values access - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 09 Mar 2007 15:38:17 +0200 - -isis-fish (3.0.10) stable; urgency=low - - * Analyse Plan implementation - * feature #1531 date automaticaly added to simulation id - * bug in Range value inversion of integer and real - * bug #1492 matrix index error for result matrix - * bug #1493 simulation, region deletion - * bug #1495 view population number with one population - * bug #1496 simulation, region order - * bug #1528 in min size in wizard class creation - * bug #1535 save/cancel button activation/desactivation - * bug #1536 simulation queue - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 05 Mar 2007 15:38:17 +0200 - -isis-fish (3.0.9) stable; urgency=low - - * add equation editor with syntaxe checking on all equation - * implement Region checking mecanisme - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 08 Feb 2007 15:38:17 +0200 - -isis-fish (3.0.8) stable; urgency=low - - * force checkout of directory not checkouted at startup - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 05 Feb 2007 15:38:17 +0200 - -isis-fish (3.0.7) stable; urgency=low - - * add import region and rename menu - * bug in update script - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 25 Jan 2007 15:38:17 +0200 - -isis-fish (3.0.6) stable; urgency=low - - * add support for user prompt update file at startup - * bug saisons (bad converter init) - * simulation thread completely rewriten - * first version of systray - * region copy - * bug tree refresh after delete region - * cvs synchronisation menu - * test de non regression - * bug in exports - * bug in rules - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 25 Jan 2007 15:38:17 +0200 - -isis-fish (3.0.5) stable; urgency=low - - * add support for delete prompt message and delete cascade prompt message - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 20 Nov 2006 15:38:17 +0200 - -isis-fish (3.0.4) stable; urgency=low - - * improve cache key computation (use string), (gain 80%) - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 17 Nov 2006 15:38:17 +0200 - -isis-fish (3.0.3) stable; urgency=low - - * bug in getMonth if date is negative - * bug in message error during equation compilation, now we show the - equation type - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 16 Nov 2006 15:38:17 +0200 - -isis-fish (3.0.2) stable; urgency=low - - * add import from isis-fish v2 - * change rules from region to root - * improve equation frame editor (equation documentation) - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 13 Nov 2006 15:38:17 +0200 - -isis-fish (3.0.1) stable; urgency=low - - * bug selection cell (selected in list -> note selected in map) - * add extension to file for model equation - * improve refresh in input - * add argument force to ResultStorage.addResult method - * bug put new Population in right Species when more than one Species (tree problem) - * bug put new Rule script in right region (tree problem) - * add firstNull='true' for gear values types - * bug when load gear with no values (null) - * change method call: Input.CommitRegionInCVS -> Input.commitRegionInCVS - * add Equation model editor - * bug in script editor, don't used translated String for script type - * bug in script editor, menu save/delete/deleteCVS work now - * change use for(int i...) in GravityModel and SiMatrix for matrix access - (gain factor 4 on matrix access and 65% on simulation) - * change use Soft cache in ResultStorage (gain 10%) - * improve ResultStorage keep in memory all result available to prevent unecessary - query on database. Useful with Soft cache. - * change use commons-collection in Cache aspect (prevent garbage bug in HashMapMultiKey) - * bug in tools.jar search pattern for Windows - * bug when create SetOfVessels in Effort description Add button - was always grey - * add getNecessaryResult in Rule to know result necessary for this rule - and activate it automaticaly - * improve all results are now optionnal - * add compute and add as result discard weight if necessary - * add TACweight in DemoRegion - * add result MATRIX_NO_ACTIVITY - * bug can set rule parameter - * bug rule parameter can be saved and restored - * improve when TopiaContext is used to read, error if another try to write - (lock table timeout). - * bug many correction in persistence (lock problem, load cycle problem) - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 26 Sep 2006 15:38:17 +0200 - -isis-fish (3.0.0) stable; urgency=low - - * Utililsation de DoubleBigVector par defaut pour les Matrix - (gain facteur entre 2 et 8 suivant parcours (Iterator, Semantic, Index) - * Suppression de tous les scripts utilisation de Java et compilation - (gain facteur 1000 pour l'eval des equations donc 91% sur la simulation) - - -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 07 Sep 2006 15:38:17 +0200 Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt (from rev 2495, isis-fish/trunk/changelog.txt) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/changelog.txt 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,311 @@ +isis-fish (3.2.0.5-rc1) chatellier + + * Remove inprocess launcher (due to memory consumption) + * Readd tools.jar (isis don't need jdk anymore) + * Fix bug 1772 ( https://labs.libre-entreprise.org/tracker/index.php?func=detail&aid=1772&group_id=8&atid=113 ) + * Fix bug 1900 ( https://labs.libre-entreprise.org/tracker/index.php?func=detail&aid=1900&group_id=8&atid=113 ) + * Fix simulation plan subjob number : start at 0 + * Fix bug, database migration asked twice + * Fix VCSSVN getRemoteStatus(), not showed added status file + * Rename "factors" package to "sensitivity" + * Add tests on each storage for testing template content compilation + * Add script templates based on freemarker template engine + +isis-fish (3.2.0.4) chatellier + + * Add sensitivity analysis + +isis-fish (3.2.0.4-rc1) sletellier + + * Fix ask passphrase in svn+ssh mode + * Bugfix release + +isis-fish (3.2.0.3) chemit + + * Change simulation monitoring to work better with SSH launcher + * Update XML-RPC launcher to xmlprc 3 + * Add ssh simulation launcher + * Add Jaxx UI for all interfaces + * Remove SwixAT UI + * switch to lutinproject 3.3 + * switch to topia-service 1.0.1 + * switch to topia-persistence 2.1.1 + * remove tools.jar (now isis need JDK !!!) + +isis-fish (3.2.0.2) chatellier + + * fix missing lutinxml dependencies + +isis-fish (3.2.0.1) chemit + + * all ui are now in src/main/java + * use maven 2 directory layout + * use org.codelutin:lutinproject 3.0 + * passageto UTF-8 + +isis-fish (3.2.0.0) poussin + + * complete refactoring option, vcs + * complete refactoring simulation engin + * new launcher type (subprocess, caparmor ...) in progress + * modify script to use cell and not zone in some computation + * add TechnicalEfficiency equation + * add Inactivity equation support + +isis-fish (3.1.3) stable; urgency=high + + * bug correction when migration failed, still launch application on a new database + * bug correction changing local database in configuration ui has no effect on next launch + * bug correction if no svn connexion, application could not start + * use commandline 0.4 (improve init and user options) + * improve i18n loading (lutinutil) + * refactor init and vcs init + + -- Tony Chemit <chemit at codelutin.com> Fri, 19 Mar 2008 02:02:02 +0200 + + + * bug correction #1605 add annotation on scripts for contextual help + * bug correction #1617 Non prise en compte du changement de base locale + * add new ui for configuration + + -- Tony Chemit <chemit at codelutin.com> Fri, 26 Feb 2008 23:34:02 +0200 + + * bug correction #1601 Exception et erreur apres une simulation + * bug correction #1602 Gros probleme de mise a jour de database entre v3.0 vers 3.1 perte des pecheries + * bug i18n (loose some translate while using Isis-Fish from a jar) + + -- Tony Chemit <chemit at codelutin.com> Fri, 21 Dec 2007 11:34:02 +0200 + + +isis-fish (3.0.22) stable; urgency=high + + * bug correction when launch many simulation with AnalysePlan (OutOfMemory) + now we don't use cglib but javassist + + -- Benjamin Poussin <poussin at codelutin.com> Wed, 7 Nov 2007 21:48:31 +0100 + +isis-fish (3.0.21) stable; urgency=high + + * bug correction in ResultDatastore, bad database used to get result during simulation + * add call to close method on SimulationStorage for in memory database + * bug correction when launch many simulation with AnalysePlan (OutOfMemory) + + -- Benjamin Poussin <poussin at codelutin.com> Wed, 7 Nov 2007 21:48:31 +0100 + +isis-fish (3.0.20) stable; urgency=high + + * add clean temp directory simulation preparation + * add IsisFish version number in parameter + * add getPopulations method in PopulationMonitor + * bug correction #1592 in totalFishingMortality during reduction of matrix + * bug correction #1583 about too many file open + * bug in export script template + * bug correction in rule Cantonnement + * modify database simulation usage, now we use in memory database for + data, and file storage for result, to separate result and data. This + improve performance (70%). + * bug switch to h2 database version 1.0.60, this prevent rollback exception + during simulation + + -- Benjamin Poussin <poussin at codelutin.com> Mon, 15 Oct 2007 11:34:02 +0200 + +isis-fish (3.0.19) stable; urgency=low + + * bug in cache for String and number in parameter + * bug RuleMonitor add Rule as parameter + * add extraRules field in SimulationParameter to permit Analyse Plan to + add rules in parameter + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 06 Jun 2007 15:39:17 +0200 + +isis-fish (3.0.18) stable; urgency=low + + * bug go.bat have correct DOS end of line + * improve build-release.sh to send email to user and devel list after deploy + * bug correction in delete simulation, remove close context at begin of + clear method + * bug permit simulation without SimulationControl + * bug in queue model test if no more simulation to prevent Index Out of + bound Exception + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 24 May 2007 15:39:17 +0200 + +isis-fish (3.0.17) stable; urgency=low + + * add support for filename and extension in export script + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 24 May 2007 15:38:17 +0200 + +isis-fish (3.0.16) stable; urgency=low + + * add ssj jar to have random library + * add support to auto upgrade database (topia migration service) + * bug force reload parameter in thread simulation to prevent class cast + exception because same class is loaded in two different classloader + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 21 May 2007 15:38:17 +0200 + +isis-fish (3.0.15) stable; urgency=low + + * change database lock_mode to permit read with out lock + * change database version to 1.0.20070304 + * bug end line in equation editor + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 06 Apr 2007 15:38:17 +0200 + +isis-fish (3.0.14) stable; urgency=low + + * add beforeOrEquals and afterOrEquals methods to Date and Month + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 02 Apr 2007 15:38:17 +0200 + +isis-fish (3.0.13) stable; urgency=low + + * add simulation information support + * change aspect deployment classloader (not used Agent) + * bug in cache aspect when used without trace aspect + * add checkout maven file option + * change MatrixPanel context menu + * bug in datastore closeContext (nullify storage) + * bug in datastore getStorage (if closed create new) + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 30 Mar 2007 15:38:17 +0200 + +isis-fish (3.0.12) stable; urgency=low + + * bug in cache, help garbage with clear on collection + * add on matrix sumOverDim(dim, start, nb) + * change statistic is not used by default + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 20 Mar 2007 15:38:17 +0200 + +isis-fish (3.0.11) stable; urgency=low + + * add result support in analyse plan + * bug in AnalysePlanContext values access + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 09 Mar 2007 15:38:17 +0200 + +isis-fish (3.0.10) stable; urgency=low + + * Analyse Plan implementation + * feature #1531 date automaticaly added to simulation id + * bug in Range value inversion of integer and real + * bug #1492 matrix index error for result matrix + * bug #1493 simulation, region deletion + * bug #1495 view population number with one population + * bug #1496 simulation, region order + * bug #1528 in min size in wizard class creation + * bug #1535 save/cancel button activation/desactivation + * bug #1536 simulation queue + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 05 Mar 2007 15:38:17 +0200 + +isis-fish (3.0.9) stable; urgency=low + + * add equation editor with syntaxe checking on all equation + * implement Region checking mecanisme + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 08 Feb 2007 15:38:17 +0200 + +isis-fish (3.0.8) stable; urgency=low + + * force checkout of directory not checkouted at startup + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 05 Feb 2007 15:38:17 +0200 + +isis-fish (3.0.7) stable; urgency=low + + * add import region and rename menu + * bug in update script + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 25 Jan 2007 15:38:17 +0200 + +isis-fish (3.0.6) stable; urgency=low + + * add support for user prompt update file at startup + * bug saisons (bad converter init) + * simulation thread completely rewriten + * first version of systray + * region copy + * bug tree refresh after delete region + * cvs synchronisation menu + * test de non regression + * bug in exports + * bug in rules + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 25 Jan 2007 15:38:17 +0200 + +isis-fish (3.0.5) stable; urgency=low + + * add support for delete prompt message and delete cascade prompt message + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 20 Nov 2006 15:38:17 +0200 + +isis-fish (3.0.4) stable; urgency=low + + * improve cache key computation (use string), (gain 80%) + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 17 Nov 2006 15:38:17 +0200 + +isis-fish (3.0.3) stable; urgency=low + + * bug in getMonth if date is negative + * bug in message error during equation compilation, now we show the + equation type + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 16 Nov 2006 15:38:17 +0200 + +isis-fish (3.0.2) stable; urgency=low + + * add import from isis-fish v2 + * change rules from region to root + * improve equation frame editor (equation documentation) + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 13 Nov 2006 15:38:17 +0200 + +isis-fish (3.0.1) stable; urgency=low + + * bug selection cell (selected in list -> note selected in map) + * add extension to file for model equation + * improve refresh in input + * add argument force to ResultStorage.addResult method + * bug put new Population in right Species when more than one Species (tree problem) + * bug put new Rule script in right region (tree problem) + * add firstNull='true' for gear values types + * bug when load gear with no values (null) + * change method call: Input.CommitRegionInCVS -> Input.commitRegionInCVS + * add Equation model editor + * bug in script editor, don't used translated String for script type + * bug in script editor, menu save/delete/deleteCVS work now + * change use for(int i...) in GravityModel and SiMatrix for matrix access + (gain factor 4 on matrix access and 65% on simulation) + * change use Soft cache in ResultStorage (gain 10%) + * improve ResultStorage keep in memory all result available to prevent unecessary + query on database. Useful with Soft cache. + * change use commons-collection in Cache aspect (prevent garbage bug in HashMapMultiKey) + * bug in tools.jar search pattern for Windows + * bug when create SetOfVessels in Effort description Add button + was always grey + * add getNecessaryResult in Rule to know result necessary for this rule + and activate it automaticaly + * improve all results are now optionnal + * add compute and add as result discard weight if necessary + * add TACweight in DemoRegion + * add result MATRIX_NO_ACTIVITY + * bug can set rule parameter + * bug rule parameter can be saved and restored + * improve when TopiaContext is used to read, error if another try to write + (lock table timeout). + * bug many correction in persistence (lock problem, load cycle problem) + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 26 Sep 2006 15:38:17 +0200 + +isis-fish (3.0.0) stable; urgency=low + + * Utililsation de DoubleBigVector par defaut pour les Matrix + (gain facteur entre 2 et 8 suivant parcours (Iterator, Semantic, Index) + * Suppression de tous les scripts utilisation de Java et compilation + (gain facteur 1000 pour l'eval des equations donc 91% sur la simulation) + + -- Benjamin Poussin <poussin at cube.codelutin.com> Thu, 07 Sep 2006 15:38:17 +0200 Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml =================================================================== --- isis-fish/trunk/pom.xml 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,759 +0,0 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - - <modelVersion>4.0.0</modelVersion> - - <!-- ************************************************************* --> - <!-- *** POM Relationships *************************************** --> - <!-- ************************************************************* --> - <parent> - <groupId>org.codelutin</groupId> - <artifactId>lutinproject</artifactId> - <version>3.5</version> - </parent> - - <groupId>ifremer</groupId> - <artifactId>isis-fish</artifactId> - <version>3.2.0.5-rc1-SNAPSHOT</version> - - <!-- POM Relationships : Inheritance : Dependencies --> - <dependencies> - - <!--Compile--> - - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <version>1.2.14</version> - <scope>compile</scope> - </dependency> - - <!--Librairies CodeLutin--> - <dependency> - <groupId>org.codelutin</groupId> - <artifactId>lutinutil</artifactId> - <version>${lutinutil.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.codelutin.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${topia.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.codelutin</groupId> - <artifactId>topia-service</artifactId> - <version>${topia.service.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.codelutin</groupId> - <artifactId>lutinmatrix</artifactId> - <version>${lutinmatrix.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.codelutin</groupId> - <artifactId>lutinwidget</artifactId> - <version>${lutinwidget.version}</version> - <scope>compile</scope> - </dependency> - - <!--Jaxx--> - <dependency> - <groupId>org.codelutin.jaxx</groupId> - <artifactId>jaxx-runtime-swing</artifactId> - <version>${jaxx.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.codelutin.jaxx</groupId> - <artifactId>jaxx-runtime-validator</artifactId> - <version>${jaxx.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.codelutin.jaxx</groupId> - <artifactId>jaxx-runtime-swing-widget</artifactId> - <version>${jaxx.version}</version> - <scope>compile</scope> - </dependency> - - <!-- Utilisé dans les scripts --> - <dependency> - <groupId>org.codelutin</groupId> - <artifactId>lutinj2r</artifactId> - <version>${lutinj2r.version}</version> - <scope>compile</scope> - </dependency> - - <!--Commons--> - <dependency> - <groupId>commons-jxpath</groupId> - <artifactId>commons-jxpath</artifactId> - <version>1.2</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>commons-lang</groupId> - <artifactId>commons-lang</artifactId> - <version>2.4</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>commons-math</groupId> - <artifactId>commons-math</artifactId> - <version>1.2</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>commons-collections</groupId> - <artifactId>commons-collections</artifactId> - <version>3.2.1</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>commons-beanutils</groupId> - <artifactId>commons-beanutils</artifactId> - <version>1.8.0</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - <version>1.4</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>dom4j</groupId> - <artifactId>dom4j</artifactId> - <version>1.6.1</version> - <scope>compile</scope> - </dependency> - - <!--Other--> - <dependency> - <groupId>jfreechart</groupId> - <artifactId>jfreechart</artifactId> - <version>0.9.3</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>jcommon</groupId> - <artifactId>jcommon</artifactId> - <version>0.7.0</version> - <scope>compile</scope> - </dependency> - - <!-- XML-RPC Client and server --> - <dependency> - <groupId>org.apache.xmlrpc</groupId> - <artifactId>xmlrpc-client</artifactId> - <version>${xmlrpc.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.apache.xmlrpc</groupId> - <artifactId>xmlrpc-server</artifactId> - <version>${xmlrpc.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>commons-httpclient</groupId> - <artifactId>commons-httpclient</artifactId> - <version>3.1</version> - <scope>runtime</scope> - </dependency> - - <!-- encore utilise pour les pre-scripts --> - <dependency> - <groupId>org.beanshell</groupId> - <artifactId>bsh</artifactId> - <version>2.0b4</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>openmap</groupId> - <artifactId>openmap</artifactId> - <version>${openmap.version}</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>org.fife</groupId> - <artifactId>rsyntaxtextarea</artifactId> - <version>1.3.3</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>com.jcraft</groupId> - <artifactId>jsch</artifactId> - <version>0.1.41</version> - <scope>compile</scope> - </dependency> - - <!-- Utilisé lors de l'import xml v2 (entre autre) --> - <dependency> - <groupId>jaxen</groupId> - <artifactId>jaxen</artifactId> - <version>1.1.1</version> - <scope>runtime</scope> - </dependency> - - <!-- Change this dependence if you change database --> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>1.1.114</version> - <scope>compile</scope> - </dependency> - - <!-- aspectwerkz --> - <dependency> - <groupId>aspectwerkz</groupId> - <artifactId>aspectwerkz</artifactId> - <version>${aspectwerkz.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>aspectwerkz</groupId> - <artifactId>aspectwerkz-jdk5</artifactId> - <version>${aspectwerkz.version}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>aspectwerkz</groupId> - <artifactId>aspectwerkz-core</artifactId> - <version>${aspectwerkz.version}</version> - <scope>compile</scope> - </dependency> - - <!-- ssj pour les calculs stockastiques --> - <dependency> - <groupId>ssj</groupId> - <artifactId>ssj</artifactId> - <version>2.1.1</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>Blas</artifactId> - <version>20081007</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>colt</artifactId> - <version>20081007</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>interpreter</artifactId> - <version>1.6.8</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>language</artifactId> - <version>1.6.7</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>logger</artifactId> - <version>1.6.4</version> - <scope>runtime</scope> - </dependency> - - <dependency> - <groupId>ssj</groupId> - <artifactId>optimization</artifactId> - <version>20081007</version> - <scope>runtime</scope> - </dependency> - <!-- fin ssj pour les calculs stockastiques --> - - <!-- debut svnkit pour communication subversion --> - <dependency> - <groupId>org.tmatesoft</groupId> - <artifactId>svnkit</artifactId> - <version>1.2.3.5521</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>com.trilead</groupId> - <artifactId>trilead-ssh2</artifactId> - <version>build213-svnkit-1.2</version> - <scope>runtime</scope> - </dependency> - <!-- fin svnkit pour communication subversion --> - - <dependency> - <groupId>org.freemarker</groupId> - <artifactId>freemarker</artifactId> - <version>2.3.15</version> - </dependency> - - <dependency> - <groupId>net.sourceforge.cpdetector</groupId> - <artifactId>cpdetector</artifactId> - <version>1.0.7</version> - <scope>compile</scope> - </dependency> - - <dependency> - <groupId>com.sun</groupId> - <artifactId>tools</artifactId> - <version>1.6.0</version> - </dependency> - </dependencies> - - <!-- ************************************************************* --> - <!-- *** Project Information ************************************* --> - <!-- ************************************************************* --> - <name>IsisFish</name> - <description>Simulateur de pecherie complexe.</description> - <inceptionYear>1999</inceptionYear> - - <licenses> - <license> - <name>GPL</name> - <url>http://www.gnu.org/copyleft/gpl.html</url> - <distribution>repo</distribution> - </license> - </licenses> - - <!-- ************************************************************* --> - <!-- *** Build Settings ****************************************** --> - <!-- ************************************************************* --> - <packaging>jar</packaging> - - <properties> - <!-- id du projet du labs --> - <labs.id>8</labs.id> - - <!-- nom du projet du labs --> - <labs.project>isis-fish</labs.project> - - <!-- Custom version --> - <jaxx.version>1.5.1-SNAPSHOT</jaxx.version> - <topia.version>2.1.6.1-SNAPSHOT</topia.version> - <topia.service.version>1.0.3</topia.service.version> - <lutinmatrix.version>1.3</lutinmatrix.version> - <lutinutil.version>1.0.6</lutinutil.version> - <i18n.version>0.9</i18n.version> - <lutinwidget.version>0.14.1-SNAPSHOT</lutinwidget.version> - <generator.version>0.64</generator.version> - <lutinj2r.version>0.4</lutinj2r.version> - <jrst.version>0.8.4</jrst.version> - <license-switcher.version>0.6</license-switcher.version> - <openmap.version>4.6.4</openmap.version> - <aspectwerkz.version>2.0</aspectwerkz.version> - <xmlrpc.version>3.1.2</xmlrpc.version> - - <!-- for compilation test to run --> - <maven.test.forkMode>once</maven.test.forkMode> - - <!--Main class in JAR --> - <maven.jar.main.class>fr.ifremer.isisfish.IsisFish</maven.jar.main.class> - - <!-- jnlp --> - <keystorepath>${codelutin.keystorepath}</keystorepath> - <keystorealias>CodeLutin</keystorealias> - <keystorepass>codelutin</keystorepass> - <jnlp.build.directory>${project.build.directory}/jnlp</jnlp.build.directory> - - <jnlpCodebase>${project.url}</jnlpCodebase> - <!-- to test jnlp file locally --> - <jnlpCodebase>file://${jnlp.build.directory}</jnlpCodebase> - </properties> - - <build> - <plugins> - - <plugin> - <groupId>org.codelutin</groupId> - <artifactId>maven-generator-plugin</artifactId> - <version>${generator.version}</version> - <executions> - <execution> - <id>Generator</id> - <phase>generate-sources</phase> - <configuration> - <srcDirZuml>${project.basedir}/src/main/xmi</srcDirZuml> - <srcXmiDest>${maven.gen.dir}/xmi/</srcXmiDest> - <fullPackagePath>fr.ifremer.isisfish</fullPackagePath> - <extractedPackages>fr.ifremer.isisfish</extractedPackages> - <!--Config generator--> - <srcGenDest>${maven.gen.dir}/objectmodel/</srcGenDest> - <includes>**/*.objectmodel</includes> - <templates>org.codelutin.topia.generator.TopiaMetaGenerator</templates> - <excludeTemplates> - <value>org.codelutin.topia.generator.EntityEnumGenerator</value> - <value>org.codelutin.topia.generator.EntityProviderGenerator</value> - </excludeTemplates> - <destDirGen>${maven.gen.dir}/java</destDirGen> - <defaultPackage>fr.ifremer.isisfish</defaultPackage> - <copyVersionDir>${project.basedir}/src/main/resources/oldmappings/%MODELNAME% - </copyVersionDir> - <copyVersionFiles>**/*.hbm.xml</copyVersionFiles> - <copyOverwrite>true</copyOverwrite> - </configuration> - <goals> - <goal>zargo2xmi</goal> - <goal>xmi2objectmodel</goal> - <goal>generate</goal> - <goal>copyVersionFiles</goal> - </goals> - </execution> - </executions> - <dependencies> - <dependency> - <groupId>org.codelutin.topia</groupId> - <artifactId>topia-persistence</artifactId> - <version>${topia.version}</version> - <scope>runtime</scope> - </dependency> - </dependencies> - </plugin> - - <plugin> - <groupId>org.codelutin.jaxx</groupId> - <artifactId>maven-jaxx-plugin</artifactId> - <version>${jaxx.version}</version> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - <configuration> - <extraImportList>jaxx.runtime.SwingUtil,static jaxx.runtime.Util.getStringValue</extraImportList> - <addSourcesToClassPath>true</addSourcesToClassPath> - <addProjectClassPath>true</addProjectClassPath> - </configuration> - </execution> - </executions> - </plugin> - - <plugin> - <groupId>org.codelutin</groupId> - <artifactId>maven-i18n-plugin</artifactId> - <version>${i18n.version}</version> - <executions> - <execution> - <goals> - <goal>parserJava</goal> - <goal>gen</goal> - </goals> - </execution> - </executions> - </plugin> - - <!-- Always process jrst files, but only called on pre-site phase --> - <plugin> - <groupId>org.codelutin</groupId> - <artifactId>maven-jrst-plugin</artifactId> - <version>${jrst.version}</version> - <configuration> - <defaultLocale>fr</defaultLocale> - </configuration> - <executions> - <execution> - <phase>pre-site</phase> - <goals> - <goal>jrst</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <artifactId>maven-dependency-plugin</artifactId> - <executions> - <execution> - <id>copy-dependencies</id> - </execution> - </executions> - </plugin> - - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <version>2.2-beta-4</version> - <configuration> - <descriptors> - <descriptor>src/main/assembly/bin.xml</descriptor> - </descriptors> - <attach>false</attach> - </configuration> - <executions> - <execution> - <phase>verify</phase> - <goals> - <goal>single</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - - <pluginManagement> - <plugins> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - <addClasspath>true</addClasspath> - <classpathPrefix>lib/</classpathPrefix> - </manifest> - </archive> - </configuration> - </plugin> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <systemProperties> - <property> - <name>java.io.tmpdir</name> - <value>${project.build.directory}/surefire-workdir</value> - </property> - </systemProperties> - </configuration> - </plugin> - </plugins> - </pluginManagement> - </build> - - <reporting> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-javadoc-plugin</artifactId> - <version>2.5</version> - <configuration> - <links> - <link>http://java.sun.com/javase/6/docs/api/</link> - <link>http://lutinutil.labs.libre-entreprise.org/lutinutil/apidocs/</link> - <link>http://lutinmatrix.labs.libre-entreprise.org/lutinmatrix/apidocs/</link> - <link>http://topia.labs.libre-entreprise.org/topia/topia-persistence/apidocs/</link> - </links> - </configuration> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>findbugs-maven-plugin</artifactId> - <version>2.1</version> - </plugin> - </plugins> - </reporting> - - <!-- ************************************************************* --> - <!-- *** Build Environment ************************************** --> - <!-- ************************************************************* --> - <scm> - <connection>scm:svn:svn://anonymous at labs.libre-entreprise.org/svnroot/isis-fish/isis-fish/trunk</connection> - <developerConnection>scm:svn:svn+ssh://chatellier at labs.libre-entreprise.org/svnroot/isis-fish/isis-fish/trunk</developerConnection> - <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/isis-fish/trunk/?root=isis-fish</url> - </scm> - - <!--Code Lutin Repository--> - <repositories> - <repository> - <id>codelutin-repository</id> - <name>CodeLutinRepository</name> - <url>http://lutinbuilder.labs.libre-entreprise.org/maven2</url> - <snapshots> - <enabled>true</enabled> - <checksumPolicy>warn</checksumPolicy> - </snapshots> - <releases> - <enabled>true</enabled> - <checksumPolicy>warn</checksumPolicy> - </releases> - </repository> - </repositories> - - <profiles> - <profile> - <id>release-profile</id> - <activation> - <property> - <name>performRelease</name> - <value>true</value> - </property> - </activation> - <build> - <plugins> - - <!-- always add license and third-party files to classpath --> - <plugin> - <groupId>org.codelutin</groupId> - <artifactId>maven-license-switcher-plugin</artifactId> - <version>${license-switcher.version}</version> - <configuration> - <licenseName>${license-switcher.licenseName}</licenseName> - </configuration> - <executions> - <execution> - <id>attach-licenses</id> - <goals> - <!--goal>license</goal--> - <goal>third-party</goal> - </goals> - </execution> - </executions> - </plugin> - - <plugin> - <artifactId>maven-antrun-plugin</artifactId> - <executions> - <!-- Ajout des libs signe par Sun dans un fichier jnlp separe --> - <execution> - <id>JnlpSun</id> - <phase>verify</phase> - <configuration> - <tasks> - <mkdir dir="${jnlp.build.directory}" /> - <copy file="${project.basedir}/src/main/jnlp/sun.jnlp" verbose="${maven.verbose}" todir="${jnlp.build.directory}" failonerror="false"> - <filterset> - <filter token="lib-javahelp" value="javahelp-2.0.02.jar" /> - <filter token="lib-activation" value="activation-1.1.jar" /> - <filter token="lib-mail" value="mail-1.4.jar" /> - <filter token="url" value="${jnlpCodebase}" /> - </filterset> - </copy> - <copy file="${project.basedir}/src/main/jnlp/jxlayer.jnlp" verbose="${maven.verbose}" todir="${jnlp.build.directory}" failonerror="false"> - <filterset> - <filter token="lib" value="jxlayer-3.0.1.jar" /> - <filter token="url" value="${jnlpCodebase}" /> - </filterset> - </copy> - - <copy verbose="${maven.verbose}" todir="${jnlp.build.directory}/lib" failonerror="false"> - <fileset dir="${project.build.directory}/lib"> - <include name="javahelp-2.0.02.jar" /> - <include name="activation-1.1.jar" /> - <include name="mail-1.4.jar" /> - <include name="jxlayer-3.0.1.jar" /> - </fileset> - </copy> - </tasks> - </configuration> - <goals> - <goal>run</goal> - </goals> - </execution> - - <execution> - <id>JnlpToSite</id> - <phase>pre-site</phase> - <configuration> - <tasks> - <mkdir dir="${maven.site.gen.dir}/resources" /> - <copy todir="${maven.site.gen.dir}/resources" verbose="true" failonerror="false" overwrite="false"> - <fileset dir="${jnlp.build.directory}"> - <include name="**" /> - </fileset> - <!-- should be better to use the deployed assembly in lutinbuilder ? --> - <fileset dir="target"> - <include name="${project.build.finalName}-bin.zip" /> - </fileset> - - </copy> - </tasks> - </configuration> - <goals> - <goal>run</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo.webstart</groupId> - <artifactId>webstart-maven-plugin</artifactId> - <version>1.0-alpha-2-cl_20090204</version> - <executions> - <execution> - <phase>verify</phase> - <goals> - <goal>jnlp-inline</goal> - </goals> - </execution> - </executions> - <configuration> - <force>false</force> - <dependencies> - <excludes> - <exclude>javax.help:javahelp</exclude> - <exclude>javax.mail:mail</exclude> - <exclude>javax.activation:activation</exclude> - <exclude>org.swinglabs:jxlayer</exclude> - </excludes> - </dependencies> - <libPath>lib</libPath> - <extensions> - <sun>sun.jnlp</sun> - <jxlayer>jxlayer.jnlp</jxlayer> - </extensions> - <jnlp> - <outputFile>isis-fish-v3.jnlp</outputFile> - <mainClass>${maven.jar.main.class}</mainClass> - <allPermissions>true</allPermissions> - <offlineAllowed>true</offlineAllowed> - </jnlp> - - <sign> - <keystore>${keystorepath}</keystore> - <keypass /> - <storepass>${keystorepass}</storepass> - <storetype /> - <alias>${keystorealias}</alias> - <validity /> - <dnameCn /> - <dnameOu /> - <dnameO /> - <dnameL /> - <dnameSt /> - <dnameC /> - <verify>true</verify> - <keystoreConfig> - <delete>false</delete> - <gen>false</gen> - </keystoreConfig> - </sign> - <pack200>false</pack200> - <gzip>true</gzip> - <verbose>false</verbose> - </configuration> - </plugin> - - </plugins> - </build> - </profile> - - </profiles> - -</project> Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml (from rev 2498, isis-fish/trunk/pom.xml) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/pom.xml 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,770 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <!-- ************************************************************* --> + <!-- *** POM Relationships *************************************** --> + <!-- ************************************************************* --> + <parent> + <groupId>org.codelutin</groupId> + <artifactId>lutinproject</artifactId> + <version>3.5</version> + </parent> + + <groupId>ifremer</groupId> + <artifactId>isis-fish</artifactId> + <version>3.2.0.5-rc1</version> + + <!-- POM Relationships : Inheritance : Dependencies --> + <dependencies> + + <!--Compile--> + + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.14</version> + <scope>compile</scope> + </dependency> + + <!--Librairies CodeLutin--> + <dependency> + <groupId>org.codelutin</groupId> + <artifactId>lutinutil</artifactId> + <version>${lutinutil.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.codelutin.topia</groupId> + <artifactId>topia-persistence</artifactId> + <version>${topia.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.codelutin</groupId> + <artifactId>topia-service</artifactId> + <version>${topia.service.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.codelutin</groupId> + <artifactId>lutinmatrix</artifactId> + <version>${lutinmatrix.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.codelutin</groupId> + <artifactId>lutinwidget</artifactId> + <version>${lutinwidget.version}</version> + <scope>compile</scope> + </dependency> + + <!--Jaxx--> + <dependency> + <groupId>org.codelutin.jaxx</groupId> + <artifactId>jaxx-runtime-swing</artifactId> + <version>${jaxx.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.codelutin.jaxx</groupId> + <artifactId>jaxx-runtime-validator</artifactId> + <version>${jaxx.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.codelutin.jaxx</groupId> + <artifactId>jaxx-runtime-swing-widget</artifactId> + <version>${jaxx.version}</version> + <scope>compile</scope> + </dependency> + + <!-- Utilisé dans les scripts --> + <dependency> + <groupId>org.codelutin</groupId> + <artifactId>lutinj2r</artifactId> + <version>${lutinj2r.version}</version> + <scope>compile</scope> + </dependency> + + <!--Commons--> + <dependency> + <groupId>commons-jxpath</groupId> + <artifactId>commons-jxpath</artifactId> + <version>1.2</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-lang</groupId> + <artifactId>commons-lang</artifactId> + <version>2.4</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-math</groupId> + <artifactId>commons-math</artifactId> + <version>1.2</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + <version>3.2.1</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.8.0</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>1.4</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>dom4j</groupId> + <artifactId>dom4j</artifactId> + <version>1.6.1</version> + <scope>compile</scope> + </dependency> + + <!--Other--> + <dependency> + <groupId>jfreechart</groupId> + <artifactId>jfreechart</artifactId> + <version>0.9.3</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>jcommon</groupId> + <artifactId>jcommon</artifactId> + <version>0.7.0</version> + <scope>compile</scope> + </dependency> + + <!-- XML-RPC Client and server --> + <dependency> + <groupId>org.apache.xmlrpc</groupId> + <artifactId>xmlrpc-client</artifactId> + <version>${xmlrpc.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.apache.xmlrpc</groupId> + <artifactId>xmlrpc-server</artifactId> + <version>${xmlrpc.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + <version>3.1</version> + <scope>runtime</scope> + </dependency> + + <!-- encore utilise pour les pre-scripts --> + <dependency> + <groupId>org.beanshell</groupId> + <artifactId>bsh</artifactId> + <version>2.0b4</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>openmap</groupId> + <artifactId>openmap</artifactId> + <version>${openmap.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.fife</groupId> + <artifactId>rsyntaxtextarea</artifactId> + <version>1.3.3</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>com.jcraft</groupId> + <artifactId>jsch</artifactId> + <version>0.1.41</version> + <scope>compile</scope> + </dependency> + + <!-- Utilisé lors de l'import xml v2 (entre autre) --> + <dependency> + <groupId>jaxen</groupId> + <artifactId>jaxen</artifactId> + <version>1.1.1</version> + <scope>runtime</scope> + </dependency> + + <!-- Change this dependence if you change database --> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.1.114</version> + <scope>compile</scope> + </dependency> + + <!-- aspectwerkz --> + <dependency> + <groupId>aspectwerkz</groupId> + <artifactId>aspectwerkz</artifactId> + <version>${aspectwerkz.version}</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>aspectwerkz</groupId> + <artifactId>aspectwerkz-jdk5</artifactId> + <version>${aspectwerkz.version}</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>aspectwerkz</groupId> + <artifactId>aspectwerkz-core</artifactId> + <version>${aspectwerkz.version}</version> + <scope>compile</scope> + </dependency> + + <!-- ssj pour les calculs stockastiques --> + <dependency> + <groupId>ssj</groupId> + <artifactId>ssj</artifactId> + <version>2.1.1</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>ssj</groupId> + <artifactId>Blas</artifactId> + <version>20081007</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>ssj</groupId> + <artifactId>colt</artifactId> + <version>20081007</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>ssj</groupId> + <artifactId>interpreter</artifactId> + <version>1.6.8</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>ssj</groupId> + <artifactId>language</artifactId> + <version>1.6.7</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>ssj</groupId> + <artifactId>logger</artifactId> + <version>1.6.4</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>ssj</groupId> + <artifactId>optimization</artifactId> + <version>20081007</version> + <scope>runtime</scope> + </dependency> + <!-- fin ssj pour les calculs stockastiques --> + + <!-- debut svnkit pour communication subversion --> + <dependency> + <groupId>org.tmatesoft</groupId> + <artifactId>svnkit</artifactId> + <version>1.2.3.5521</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>com.trilead</groupId> + <artifactId>trilead-ssh2</artifactId> + <version>build213-svnkit-1.2</version> + <scope>runtime</scope> + </dependency> + <!-- fin svnkit pour communication subversion --> + + <dependency> + <groupId>org.freemarker</groupId> + <artifactId>freemarker</artifactId> + <version>2.3.15</version> + </dependency> + + <dependency> + <groupId>net.sourceforge.cpdetector</groupId> + <artifactId>cpdetector</artifactId> + <version>1.0.7</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>com.sun</groupId> + <artifactId>tools</artifactId> + <version>1.6.0</version> + </dependency> + </dependencies> + + <!-- ************************************************************* --> + <!-- *** Project Information ************************************* --> + <!-- ************************************************************* --> + <name>IsisFish</name> + <description>Simulateur de pecherie complexe.</description> + <inceptionYear>1999</inceptionYear> + + <licenses> + <license> + <name>GPL</name> + <url>http://www.gnu.org/copyleft/gpl.html</url> + <distribution>repo</distribution> + </license> + </licenses> + + <!-- ************************************************************* --> + <!-- *** Build Settings ****************************************** --> + <!-- ************************************************************* --> + <packaging>jar</packaging> + + <properties> + <!-- id du projet du labs --> + <labs.id>8</labs.id> + + <!-- nom du projet du labs --> + <labs.project>isis-fish</labs.project> + + <!-- Custom version --> + <jaxx.version>1.5.1</jaxx.version> + <topia.version>2.1.6.1</topia.version> + <topia.service.version>1.0.3</topia.service.version> + <lutinmatrix.version>1.3</lutinmatrix.version> + <lutinutil.version>1.0.6</lutinutil.version> + <i18n.version>0.9</i18n.version> + <lutinwidget.version>0.14.1</lutinwidget.version> + <generator.version>0.64</generator.version> + <lutinj2r.version>0.4</lutinj2r.version> + <jrst.version>0.8.4</jrst.version> + <license-switcher.version>0.6</license-switcher.version> + <openmap.version>4.6.4</openmap.version> + <aspectwerkz.version>2.0</aspectwerkz.version> + <xmlrpc.version>3.1.2</xmlrpc.version> + + <!-- for compilation test to run --> + <maven.test.forkMode>once</maven.test.forkMode> + + <!--Main class in JAR --> + <maven.jar.main.class>fr.ifremer.isisfish.IsisFish</maven.jar.main.class> + + <!-- jnlp --> + <keystorepath>${codelutin.keystorepath}</keystorepath> + <keystorealias>CodeLutin</keystorealias> + <keystorepass>codelutin</keystorepass> + <jnlp.build.directory>${project.build.directory}/jnlp</jnlp.build.directory> + + <jnlpCodebase>${project.url}</jnlpCodebase> + <!-- to test jnlp file locally --> + <jnlpCodebase>file://${jnlp.build.directory}</jnlpCodebase> + </properties> + + <build> + <plugins> + + <plugin> + <groupId>org.codelutin</groupId> + <artifactId>maven-generator-plugin</artifactId> + <version>${generator.version}</version> + <executions> + <execution> + <id>Generator</id> + <phase>generate-sources</phase> + <configuration> + <srcDirZuml>${project.basedir}/src/main/xmi</srcDirZuml> + <srcXmiDest>${maven.gen.dir}/xmi/</srcXmiDest> + <fullPackagePath>fr.ifremer.isisfish</fullPackagePath> + <extractedPackages>fr.ifremer.isisfish</extractedPackages> + <!--Config generator--> + <srcGenDest>${maven.gen.dir}/objectmodel/</srcGenDest> + <includes>**/*.objectmodel</includes> + <templates>org.codelutin.topia.generator.TopiaMetaGenerator</templates> + <excludeTemplates> + <value>org.codelutin.topia.generator.EntityEnumGenerator</value> + <value>org.codelutin.topia.generator.EntityProviderGenerator</value> + </excludeTemplates> + <destDirGen>${maven.gen.dir}/java</destDirGen> + <defaultPackage>fr.ifremer.isisfish</defaultPackage> + <copyVersionDir>${project.basedir}/src/main/resources/oldmappings/%MODELNAME% + </copyVersionDir> + <copyVersionFiles>**/*.hbm.xml</copyVersionFiles> + <copyOverwrite>true</copyOverwrite> + </configuration> + <goals> + <goal>zargo2xmi</goal> + <goal>xmi2objectmodel</goal> + <goal>generate</goal> + <goal>copyVersionFiles</goal> + </goals> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.codelutin.topia</groupId> + <artifactId>topia-persistence</artifactId> + <version>${topia.version}</version> + <scope>runtime</scope> + </dependency> + </dependencies> + </plugin> + + <plugin> + <groupId>org.codelutin.jaxx</groupId> + <artifactId>maven-jaxx-plugin</artifactId> + <version>${jaxx.version}</version> + <executions> + <execution> + <goals> + <goal>generate</goal> + </goals> + <configuration> + <extraImportList>jaxx.runtime.SwingUtil,static jaxx.runtime.Util.getStringValue</extraImportList> + <addSourcesToClassPath>true</addSourcesToClassPath> + <addProjectClassPath>true</addProjectClassPath> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.codelutin</groupId> + <artifactId>maven-i18n-plugin</artifactId> + <version>${i18n.version}</version> + <configuration> + <entries> + <entry> + <basedir>${maven.gen.dir}/java/</basedir> + <specificGoal>parserJava</specificGoal> + <includes> + <param>**\/**UI.java</param> + </includes> + </entry> + </entries> + </configuration> + <executions> + <execution> + <goals> + <goal>parserJava</goal> + <goal>gen</goal> + </goals> + </execution> + </executions> + </plugin> + + <!-- Always process jrst files, but only called on pre-site phase --> + <plugin> + <groupId>org.codelutin</groupId> + <artifactId>maven-jrst-plugin</artifactId> + <version>${jrst.version}</version> + <configuration> + <defaultLocale>fr</defaultLocale> + </configuration> + <executions> + <execution> + <phase>pre-site</phase> + <goals> + <goal>jrst</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy-dependencies</id> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <version>2.2-beta-4</version> + <configuration> + <descriptors> + <descriptor>src/main/assembly/bin.xml</descriptor> + </descriptors> + <attach>false</attach> + </configuration> + <executions> + <execution> + <phase>verify</phase> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + + <pluginManagement> + <plugins> + <plugin> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addClasspath>true</addClasspath> + <classpathPrefix>lib/</classpathPrefix> + </manifest> + </archive> + </configuration> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <systemProperties> + <property> + <name>java.io.tmpdir</name> + <value>${project.build.directory}/surefire-workdir</value> + </property> + </systemProperties> + </configuration> + </plugin> + </plugins> + </pluginManagement> + </build> + + <reporting> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>2.5</version> + <configuration> + <links> + <link>http://java.sun.com/javase/6/docs/api/</link> + <link>http://lutinutil.labs.libre-entreprise.org/lutinutil/apidocs/</link> + <link>http://lutinmatrix.labs.libre-entreprise.org/lutinmatrix/apidocs/</link> + <link>http://topia.labs.libre-entreprise.org/topia/topia-persistence/apidocs/</link> + </links> + </configuration> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>findbugs-maven-plugin</artifactId> + <version>2.1</version> + </plugin> + </plugins> + </reporting> + + <!-- ************************************************************* --> + <!-- *** Build Environment ************************************** --> + <!-- ************************************************************* --> + <scm> + <connection>scm:svn:svn://anonymous at labs.libre-entreprise.org/svnroot/isis-fish/isis-fish/tags/isis-fish-3.2.0.5-rc1</connection> + <developerConnection>scm:svn:svn+ssh://chatellier at labs.libre-entreprise.org/svnroot/isis-fish/isis-fish/tags/isis-fish-3.2.0.5-rc1</developerConnection> + <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/isis-fish/tags/isis-fish-3.2.0.5-rc1?root=isis-fish</url> + </scm> + + <!--Code Lutin Repository--> + <repositories> + <repository> + <id>codelutin-repository</id> + <name>CodeLutinRepository</name> + <url>http://lutinbuilder.labs.libre-entreprise.org/maven2</url> + <snapshots> + <enabled>true</enabled> + <checksumPolicy>warn</checksumPolicy> + </snapshots> + <releases> + <enabled>true</enabled> + <checksumPolicy>warn</checksumPolicy> + </releases> + </repository> + </repositories> + + <profiles> + <profile> + <id>release-profile</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> + <build> + <plugins> + + <!-- always add license and third-party files to classpath --> + <plugin> + <groupId>org.codelutin</groupId> + <artifactId>maven-license-switcher-plugin</artifactId> + <version>${license-switcher.version}</version> + <configuration> + <licenseName>${license-switcher.licenseName}</licenseName> + </configuration> + <executions> + <execution> + <id>attach-licenses</id> + <goals> + <!--goal>license</goal--> + <goal>third-party</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <!-- Ajout des libs signe par Sun dans un fichier jnlp separe --> + <execution> + <id>JnlpSun</id> + <phase>verify</phase> + <configuration> + <tasks> + <mkdir dir="${jnlp.build.directory}" /> + <copy file="${project.basedir}/src/main/jnlp/sun.jnlp" verbose="${maven.verbose}" todir="${jnlp.build.directory}" failonerror="false"> + <filterset> + <filter token="lib-javahelp" value="javahelp-2.0.02.jar" /> + <filter token="lib-activation" value="activation-1.1.jar" /> + <filter token="lib-mail" value="mail-1.4.jar" /> + <filter token="url" value="${jnlpCodebase}" /> + </filterset> + </copy> + <copy file="${project.basedir}/src/main/jnlp/jxlayer.jnlp" verbose="${maven.verbose}" todir="${jnlp.build.directory}" failonerror="false"> + <filterset> + <filter token="lib" value="jxlayer-3.0.1.jar" /> + <filter token="url" value="${jnlpCodebase}" /> + </filterset> + </copy> + + <copy verbose="${maven.verbose}" todir="${jnlp.build.directory}/lib" failonerror="false"> + <fileset dir="${project.build.directory}/lib"> + <include name="javahelp-2.0.02.jar" /> + <include name="activation-1.1.jar" /> + <include name="mail-1.4.jar" /> + <include name="jxlayer-3.0.1.jar" /> + </fileset> + </copy> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + + <execution> + <id>JnlpToSite</id> + <phase>pre-site</phase> + <configuration> + <tasks> + <mkdir dir="${maven.site.gen.dir}/resources" /> + <copy todir="${maven.site.gen.dir}/resources" verbose="true" failonerror="false" overwrite="false"> + <fileset dir="${jnlp.build.directory}"> + <include name="**" /> + </fileset> + <!-- should be better to use the deployed assembly in lutinbuilder ? --> + <fileset dir="target"> + <include name="${project.build.finalName}-bin.zip" /> + </fileset> + + </copy> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo.webstart</groupId> + <artifactId>webstart-maven-plugin</artifactId> + <version>1.0-alpha-2-cl_20090204</version> + <executions> + <execution> + <phase>verify</phase> + <goals> + <goal>jnlp-inline</goal> + </goals> + </execution> + </executions> + <configuration> + <force>false</force> + <dependencies> + <excludes> + <exclude>javax.help:javahelp</exclude> + <exclude>javax.mail:mail</exclude> + <exclude>javax.activation:activation</exclude> + <exclude>org.swinglabs:jxlayer</exclude> + </excludes> + </dependencies> + <libPath>lib</libPath> + <extensions> + <sun>sun.jnlp</sun> + <jxlayer>jxlayer.jnlp</jxlayer> + </extensions> + <jnlp> + <outputFile>isis-fish-v3.jnlp</outputFile> + <mainClass>${maven.jar.main.class}</mainClass> + <allPermissions>true</allPermissions> + <offlineAllowed>true</offlineAllowed> + </jnlp> + + <sign> + <keystore>${keystorepath}</keystore> + <keypass /> + <storepass>${keystorepass}</storepass> + <storetype /> + <alias>${keystorealias}</alias> + <validity /> + <dnameCn /> + <dnameOu /> + <dnameO /> + <dnameL /> + <dnameSt /> + <dnameC /> + <verify>true</verify> + <keystoreConfig> + <delete>false</delete> + <gen>false</gen> + </keystoreConfig> + </sign> + <pack200>false</pack200> + <gzip>true</gzip> + <verbose>false</verbose> + </configuration> + </plugin> + + </plugins> + </build> + </profile> + + </profiles> + +</project> Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,1001 +0,0 @@ -/* *##% - * Copyright (C) 2002-2009 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * ##%*/ - -package fr.ifremer.isisfish; - -import static org.codelutin.i18n.I18n._; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.lang.time.DurationFormatUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.util.ApplicationConfig; -import org.codelutin.util.ArgumentsParserException; -import org.codelutin.util.StringUtil; -import org.codelutin.util.VersionNumber; - -import fr.ifremer.isisfish.actions.ExportAction; -import fr.ifremer.isisfish.actions.ImportAction; -import fr.ifremer.isisfish.actions.OtherAction; -import fr.ifremer.isisfish.actions.SimulationAction; -import fr.ifremer.isisfish.actions.VCSAction; -import fr.ifremer.isisfish.simulator.SimulationContext; -import fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher; -import fr.ifremer.isisfish.simulator.launcher.SimulationService; -import fr.ifremer.isisfish.simulator.launcher.SSHSimulatorLauncher; -import fr.ifremer.isisfish.simulator.launcher.SubProcessSimulationLauncher; -import fr.ifremer.isisfish.vcs.VCS; - -/** - * Isis fish configuration. - * - * @author poussin - * @version $Revision: 1310 $ - * - * Last update: $Date: 2008-08-23 00:46:00 +0200 (Sat, 23 Aug 2008) $ - * by : $Author: bpoussin $ - */ -public class IsisConfig extends ApplicationConfig { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - private static Log log = LogFactory.getLog(IsisConfig.class); - - /** - * Config step after init. - * - * Refactored, can't be in enum - * - * @see org.codelutin.util.ApplicationConfig.Action.Step - */ - public static final int STEP_AFTER_INIT = 0; - - /** - * Config step after init vcs. - * - * Refactored, can't be in enum - * - * @see org.codelutin.util.ApplicationConfig.Action.Step - */ - public static final int STEP_AFTER_INIT_VCS = 1; - - /** - * Config step after ui. - * - * Refactored, can't be in enum - * - * @see org.codelutin.util.ApplicationConfig.Action.Step - */ - public static final int STEP_AFTER_UI = 2; - - /** - * Config step before exit. - * - * Refactored, can't be in enum - * - * @see org.codelutin.util.ApplicationConfig.Action.Step - */ - public static final int STEP_BEFORE_EXIT = 3; - - /** - * La version du logiciel constitue de l.d.a.r - * <li>l: le numero de version du logiciel - * <li>d: le numero de version du schema de la base de donnees - * <li>a: le numero de version de l'api des scripts - * <li>r: le numero de version de de l'interface graphique ou autre modif mineur - * <p> - * lors de l'increment de l, d, a et r sont remis a 0 - * lors de l'increment de d, a et r sont remis a 0 - * lors de l'increment de a, r est remis a 0 - * <p> - * Un changement d'UI ne modifie jamais le numero de version de database - * Un changement de schema de base pour lequel on ne peut pas faire de - * migration de donnees demande automatiquement un changement de version - * d'application. - */ - protected final static VersionNumber version = new VersionNumber(3, 2, 0, 5); - protected final static VersionNumber databaseVersion = new VersionNumber( - version.getNumber(0), version.getNumber(1)); - protected final static VersionNumber apiVersion = new VersionNumber( - version.getNumber(0), version.getNumber(1), version.getNumber(2)); - - public static VersionNumber getVersionNumber() { - return version; - } - - /** - * le nombre global ex: 3.2.0.0 - * @return - */ - static public String getVersion() { - String result = version.toString(); - return result; - } - - /** - * La version de la base ex: 3.2 - * @return - */ - public static VersionNumber getDatabaseVersion() { - return databaseVersion; - } - - /** - * La version de l'api de programmation ex: 3.2.0 - * @return - */ - public static VersionNumber getApiVersion() { - return apiVersion; - } - - static final public String COPYRIGHT_TEXT = "Version " + getVersion() + " IFREMER-MAERHA © 2000-2009"; - static final public String CONFIG_FILENAME = "isis-config-" + version.getNumber(0); - - /** separateur de liste */ - static final public String SEP = ","; - static final public String REPORT_EMAIL = "isis-fish-bugreport at lists.labs.libre-entreprise.org"; - - protected transient File backupSessionDirectory = null; - protected long startingTime = System.nanoTime(); - - public IsisConfig() { - - for (Option o : Option.values()) { - setDefaultOption(o.key, o.defaultValue); - } - - for (Action a : Action.values()) { - for (String alias : a.aliases) { - addActionAlias(alias, a.action); - } - } - - } - - ////////////////////////////////////////////////// - // Methode d'acces aux options - ////////////////////////////////////////////////// - - /** - * Retourne le repertoire racine de toutes les donnees (script, simulation - * region, ...) - * @return - */ - public File getDatabaseDirectory() { - File result = getOptionAsFile(Option.DATABASE_DIRECTORY.key); - return result; - } - - /** - * Retourne le lock a utiliser pour la base h2. - * - * Par defaut la base utilise 'file'. - * - * Les valeurs acceptées sont : - * - file - * - socket - * - no - * - * http://www.h2database.com/html/features.html#database_file_locking - * - * @return h2 db lock mode - */ - public String getDatabaseLockMode() { - String result = getOption(Option.DATABASE_LOCK_MODE.key); - return result; - } - - /** - * Retourne le repertoire ou sont stockes les scripts compiles. - * - * Create directory if not exists. - * - * @return compilation directory - */ - public File getCompileDirectory() { - File result = getOptionAsFile(Option.COMPILATION_DIRECTORY.key); - if (!result.exists()) { - result.mkdirs(); - } - return result; - } - - /** - * Get javadoc directory. - * - * Create directory if not exists. - * - * @return javadoc directory - */ - public File getJavadocDirectory() { - File result = getOptionAsFile(Option.COMPILATION_DIRECTORY.key); - if (!result.exists()) { - result.mkdirs(); - } - return result; - } - - /** - * Retourne l'objet {@link Locale} a utilise pour la langue. - * - * @return application {@link Locale} - */ - public Locale getLocale() { - String value = getOption(Option.LOCALE.key); - Locale result = (Locale)ConvertUtils.convert(value, Locale.class); - return result; - } - - /** - * Retourne l'encoding a utiliser pour les fichiers textes - * @return - */ - public String getEncoding() { - String result = getOption(Option.ENCODING.key); - return result; - } - - /** - * Retourne le serveur SMTP a utiliser pour l'envoie de mail - * @return - */ - public String getSmtpServer() { - String result = getOption(Option.SMTP_SERVER.key); - return result; - } - - /** - * Retourne le nom usuel de l'utilisateur - * @return - */ - public String getUserName() { - String result = getOption(Option.USER_NAME.key); - return result; - } - - /** - * Retourne l'email de l'utilisateur - * @return - */ - public String getUserMail() { - String result = getOption(Option.USER_MAIL.key); - return result; - } - - /** - * Retourne l'url du serveur de simulation - * @return simulator server - */ - public String getSimulatorServer() { - String result = getOption(Option.SIMULATOR_SERVER.key); - return result; - } - - /** - * Retourne le login pour acceder au serveur de simulation - * @return simulator username - */ - public String getSimulatorUsername() { - String result = getOption(Option.SIMULATOR_USER_NAME.key); - return result; - } - - /** - * Retourne le mot de passe pour acceder au serveur de simulation - * @return simulator password - */ - public String getSimulatorPassword() { - String result = getOption(Option.SIMULATOR_PASSWORD.key); - return result; - } - - public String getSimulatorClassfile() { - String result = getOption(Option.SIMULATOR_CLASSFILE.key); - return result; - } - - public void setSimulatorClassfile(String value) { - setOption(Option.SIMULATOR_CLASSFILE.key, value); - } - - /** - * Retourne l'url du serveur de simulation accessible via SSH. - * - * @return simulator server - */ - public String getSimulatorSshServer() { - String result = getOption(Option.SIMULATOR_SSH_SERVER.key); - return result; - } - - /** - * Change ssh server url value. - * - * @param sshServer - */ - public void setSimulatorSshServer(String sshServer) { - setOption(Option.SIMULATOR_SSH_SERVER.key, sshServer); - } - - /** - * Retourne le login pour acceder au serveur de simulation accessible via SSH. - * - * @return simulator username - */ - public String getSimulatorSshUsername() { - String result = getOption(Option.SIMULATOR_SSH_USER_NAME.key); - return result; - } - - /** - * Change ssh username. - * - * @param username username - */ - public void setSimulatorSshUsername(String username) { - setOption(Option.SIMULATOR_SSH_USER_NAME.key, username); - } - - /** - * Retourne le chemin relatif ou abs du repertoire root des données d'isis. - * - * @return simulator data path - */ - public String getSimulatorSshDataPath() { - String result = getOption(Option.SIMULATOR_SSH_DATAPATH.key); - return result; - } - - /** - * Change remote datapath. - * - * @param datapath datapath - */ - public void setSimulatorSshDataPath(String datapath) { - setOption(Option.SIMULATOR_SSH_DATAPATH.key, datapath); - } - - /** - * Get remote user home directory. - * - * @return remote user home - */ - public String getSimulatorSshUserHome() { - String result = getOption(Option.SIMULATOR_SSH_USER_HOME.key); - return result; - } - - /** - * Change isis remote home directory. - * - * @param userhome new remote home - */ - public void setSimulatorSshUserHome(String userhome) { - setOption(Option.SIMULATOR_SSH_USER_HOME.key, userhome); - } - - /** - * Retourne le chemin distant ou est installé isis. - * - * @return remote isis home - */ - public String getSimulatorSshIsisHome() { - String result = getOption(Option.SIMULATOR_SSH_ISIS_HOME.key); - return result; - } - - /** - * Change isis home on ssh server. - * - * @param isishome isis home - */ - public void setSimulatorSshIsisHome(String isishome) { - setOption(Option.SIMULATOR_SSH_ISIS_HOME.key, isishome); - } - - /** - * Retourne l'emplacement du dossier temporaire distant. - * - * Ce dossier doit être ABSOLUT. - * - * @return tmp dir - */ - public String getSimulatorSshTmpPath() { - String result = getOption(Option.SIMULATOR_SSH_TMPPATH.key); - return result; - } - - /** - * Change ssh temp path. - * - * @param sshtemppath temp path - */ - 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); - } - - /** - * Retourne l'interval de temps a utiliser - * pour recuperer le fichier de control. - * - * @return time (in seconds) - */ - public long getSimulatorSshControlCheckInterval() { - int result = getOptionAsInt(Option.SIMULATOR_SSH_CONTROLCHECKINTERVAL.key); - return result; - } - - /** - * Change control check interval. - * - * @param interval interval - */ - public void setSimulatorSshControlCheckInterval(long interval) { - setOption(Option.SIMULATOR_SSH_CONTROLCHECKINTERVAL.key, String.valueOf(interval)); - } - - /** - * Retourne le nombre simultané de simulations authorisées sur - * caparmor. - * - * Utilisé pour l'envoie des simulations. - * - * @return le nombre de simulations authorisé - */ - public int getSimulatorSshMaxSimultaneousSimulation() { - int result = getOptionAsInt(Option.SIMULATOR_SSH_MAX_SIMULTANEOUS_SIMULATION.key); - return result; - } - - /** - * Change max simultaneous simulation at a time. - * - * @param max max - */ - public void setSimulatorSshMaxSimultaneousSimulation(int max) { - setOption(Option.SIMULATOR_SSH_MAX_SIMULTANEOUS_SIMULATION.key, String.valueOf(max)); - } - - /** - * Retourne la clé privée de l'utilisteur courant. - * - * @return private ssh key path - */ - public File getSSHPrivateKeyFilePath() { - File result = getOptionAsFile(Option.SSH_KEY_FILE.key); - return result; - } - - /** - * Set ssh private key file path. - * - * @param sshFile new value - */ - public void setSSHPrivateKeyFilePath(File sshFile) { - setOption(Option.SSH_KEY_FILE.key, sshFile.getAbsolutePath()); - } - - /* - * Le type de simulation par defaut a utiliser (local, remote, ...) - * @return - *) - public boolean isSimulatorLocal() { - // FIXME never called - String value = getOption(Option.SIMULATOR_LAUNCHER.key); - // and following code always return false : - boolean result = "local".equalsIgnoreCase(value); - return result; - }*/ - - /*public boolean isUseVCS() { - String value = getOption(Option.VCS_TYPE.key); - boolean result = !VCSNone.TYPE_NONE.equals(value); - return result; - }*/ - - public boolean isLaunchUI() { - boolean result = getOptionAsBoolean(Option.LAUNCH_UI.key); - return result; - } - - public void setSimulatorLauncher(String value) { - setOption(Option.SIMULATOR_LAUNCHER.key, value); - } - -// public boolean isSimulationShowOnlyQueue() { -// Boolean result = getOptionAsBoolean(Option.SIMULATION_SHOW_ONLY_QUEUE.key); -// return result; -// } - - public boolean isSimulationShowOnlyError() { - Boolean result = getOptionAsBoolean(Option.SIMULATION_SHOW_ONLY_ERROR.key); - return result; - } - - public File getDefaultExportDirectory() { - File result = getOptionAsFile(Option.DEFAULT_EXPORT_DIRECTORY.key); - if (!result.exists()) { - result.mkdirs(); - } - return result; - } - - public void setDefaultExportDirectory(String value) { - setOption(Option.DEFAULT_EXPORT_DIRECTORY.key, value); - } - - public String getDefaultExportNames() { - String result = getOption(Option.DEFAULT_EXPORT_NAMES.key); - return result; - } - - public void setDefaultExportNames(List<String> exportNames) { - StringBuilder sb = new StringBuilder(); - for (String exportName : exportNames) { - sb.append(SEP).append(exportName); - } - String value = sb.toString(); - // remove first SEP - if (value.length() > 0) { - value = value.substring(1); - } - setOption(Option.DEFAULT_EXPORT_NAMES.key, value); - saveForUser(); - } - - /** - * @return la liste des noms d'exports par defaut sous forme de liste, - * a partir de la propriete {@link Option#DEFAULT_EXPORT_NAMES} - * ou null si ils n'ont jamais ete sauves par l'utilisateur. - * by user. - * @see Option#DEFAULT_EXPORT_NAMES - */ - public List<String> getDefaultExportNamesAsList() { - List<String> result = null; - String exportNamesList = getDefaultExportNames(); - if (exportNamesList != null) { - result = new ArrayList<String>(); - String[] exportNames = StringUtil.split(exportNamesList, ","); - result.addAll(Arrays.asList(exportNames)); - } - return result; - } - - public String getDefaultMapFilename() { - String result = getOption(Option.DEFAULT_MAP_FILENAME.key); - return result; - } - - public String getDefaultResultNames() { - String result = getOption(Option.DEFAULT_RESULT_NAMES.key); - return result; - } - - public void setDefaultResultNames(List<String> resultNames) { - StringBuilder sb = new StringBuilder(); - for (String resultName : resultNames) { - sb.append(SEP).append(resultName); - } - String value = sb.toString(); - // remove first SEP - if (value.length() > 0) { - value = value.substring(1); - } - setOption(Option.DEFAULT_RESULT_NAMES.key, value); - saveForUser(); - } - - /** - * @return les resultats par defaut d'une simulation sous forme de liste - * a partir de la propriete {@link Option#DEFAULT_RESULT_NAMES} - * @see Option#DEFAULT_RESULT_NAMES - */ - public List<String> getDefaultResultNamesAsList() { - List<String> result = null; - String resultNamesList = getDefaultResultNames(); - if (resultNamesList != null) { - result = new ArrayList<String>(); - String[] resultNames = StringUtil.split(resultNamesList, ","); - result.addAll(Arrays.asList(resultNames)); - } - return result; - } - - public String getDefaultTagValue() { - String result = getOption(Option.DEFAULT_TAG_VALUE.key); - return result; - } - - public void setDefaultTagValues(Map<String, String> tagValues) { - StringBuilder sb = new StringBuilder(" "); - for (Map.Entry<String, String> entry : tagValues.entrySet()) { - sb.append(SEP).append('"').append(entry.getKey()).append("\":\"").append(entry.getValue()).append('"'); - } - String value = sb.toString().trim(); - setOption(Option.DEFAULT_TAG_VALUE.key, value.isEmpty() ? "" : value.substring(1)); - saveForUser(); - } - - - - /** - * @return le dictionnaire des tags par defaut d'une simulation a partir - * de la propriete {@link Option#DEFAULT_TAG_VALUE} - * @see Option#DEFAULT_TAG_VALUE - */ - public Map<String, String> getDefaultTagValueAsMap() { - Map<String, String> result = new HashMap<String, String>(); - String tagValuesList = getDefaultTagValue(); - if (tagValuesList != null) { - String[] tagValues = StringUtil.split(tagValuesList, ","); - for (String tagValue : tagValues) { - String[] tagAndValue = StringUtil.split(tagValue, ":"); - - String tag = tagAndValue[0].trim(); - tag = tag.substring(1, tag.length() - 1); // remove "..." - - String value = tagAndValue[1].trim(); - value = value.substring(1, value.length() - 1); // remove "..." - - result.put(tag, value); - } - } - return result; - } - - public String getJavadocURL() { - String result = getOption(Option.JAVADOC_URL.key); - return result; - } - - public File getBackupDirectory() { - File result = getOptionAsFile(Option.BACKUP_DIRECTORY.key); - return result; - } - - public long getStartingTime() { - return startingTime; - } - - public String getElapsedTimeAsString() { - long diff = System.nanoTime() - getStartingTime(); - String result = DurationFormatUtils.formatDuration(diff / 1000000, "s'.'S"); - return result; - } - - public File getBackupSessionDirectory() { - if (backupSessionDirectory == null) { - // le timestamp est en nano (on le veut en ms) - long time = getStartingTime() / 1000; - // creation de l'unique répertoire de backup pour la session - String path = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new java.util.Date(time)); - backupSessionDirectory = new File(getBackupDirectory(), path); - if (!backupSessionDirectory.exists()) { - backupSessionDirectory.mkdirs(); - } - } - return backupSessionDirectory; - } - - /** - * Retourne un class loader contenant le repertoire de compilation - * Il permet alors de charger des classes qui viennent d'etre compilees - * dans isis - * If current thread is in simulation then return specific simulation - * compilation directory, else default compilation directory - * - * @return the class loader adequate - */ - public ClassLoader getScriptClassLoader() { - SimulationContext simContext = SimulationContext.get(); - ClassLoader result = simContext.getClassLoader(); - if (result == null) { - // on est pas dans une simulation, il faut retourner un nouveau - // a chaque fois. on force la creation d'un nouveau classloader - // a chaque fois pour - // que l'ancienne class compiler et charg<E9> ne soit pas presente - File f = getCompileDirectory(); - try { - URL[] cp = new URL[]{f.toURI().toURL()}; - // il faut prendre le ClassLoader du thread courant comme parent - // car pour les simulations il a ete modifi<E9>, et il faut - // que les classes de script soit recherch<E9> dedans avant - // la recherche dans le getCompileDirectory(). - // ce qui est le cas avec les URLClassLoader - ClassLoader parent = Thread.currentThread().getContextClassLoader(); - result = new URLClassLoader(cp, parent); - } catch (MalformedURLException eee) { - throw new IsisFishRuntimeException(_("isisfish.error.load.classloader", f, eee.getMessage()), eee); - } - } - return result; - } - - /** - * Surcharge pour la migration des options de config qui ont change de nom - * <p> - * TODO: lors du passage en version 4.0 on pourrait supprimer cette methode - * - * @param args - * @throws org.codelutin.util.ArgumentsParserException - */ - @Override - public void parse(String[] args) throws ArgumentsParserException { - super.parse(args); - // dans la version precedente (3.1) seul le fichier user existe, il est - // donc le seul a devoir etre modifie - boolean mustSave = false; - String[] keys = new String[]{ - "compileDirectory", Option.COMPILATION_DIRECTORY.key, - "defaultBackupDirectory", Option.BACKUP_DIRECTORY.key, - "defaultExportDirectory", Option.DEFAULT_EXPORT_DIRECTORY.key, - "defaultExportNames", Option.DEFAULT_EXPORT_NAMES.key, - "defaultMapFile", Option.DEFAULT_MAP_FILENAME.key, - "defaultResultNames", Option.DEFAULT_RESULT_NAMES.key, - "defaultSimulator", Option.SIMULATOR_CLASSFILE.key, - "defaultTagValue", Option.DEFAULT_TAG_VALUE.key, - "javadocURL", Option.JAVADOC_URL.key, - "locale", Option.LOCALE.key, - "login", Option.SIMULATOR_USER_NAME.key, - "password", Option.SIMULATOR_PASSWORD.key, - "simulationServer", Option.SIMULATOR_SERVER.key, - "simulationShowOnlyError", Option.SIMULATION_SHOW_ONLY_ERROR.key, - "simulationShowOnlyQueue", null, // Option.SIMULATION_SHOW_ONLY_QUEUE.key, - "smtpServer", Option.SMTP_SERVER.key, - "userMail", Option.USER_MAIL.key, - "userName", Option.USER_NAME.key, - "vcs.keyFile", Option.VCS_SSH_KEY_FILE.key, - "vcs.localDatabasePath", Option.DATABASE_DIRECTORY.key, - // on supprime car non compatible, les valeurs par defaut sont tres bien - "localSimulator", null, - "vcs.databaseVersion", null, - "vcs.hostName", null, - "vcs.noPassPhrase", null, - "vcs.remoteDatabase", null, - "vcs.remotePath", null, - "vcs.type", null, - "vcs.typeRepo", null, - "vcs.useSshConnexion", null, - "vcs.userName", null, - "version", null, - "projectName", null, - "simulationReportMail", null, - - }; - - if (log.isInfoEnabled()) { - log.info("Check configuration change"); - } - - for(int i=0; i<keys.length;) { - String oldKey = keys[i++]; - String newKey = keys[i++]; - if (!oldKey.equals(newKey)) { - String value = getOption(oldKey); - if (value != null) { - mustSave = true; - // quoi qu'il arrive on enleve l'ancienne cle - homefile.remove(oldKey); - if (newKey != null) { - setOption(newKey, value); - } - } - } - } - if (mustSave) { - saveForUser(); - if (log.isInfoEnabled()) { - log.info("Config file migration done"); - } - } - if (log.isDebugEnabled()) { - printConfig(); - } - } - - ////////////////////////////////////////////////// - // Toutes les options disponibles - ////////////////////////////////////////////////// - - /** - * Options. - * - * Set it protected to force getOption() call. - */ - public static enum Option { - - COMPILATION_DIRECTORY("compilation.directory", _("isisfish.config.main.compileDirectory.description"), getUserHome() + File.separator + "isis-build"), - JAVADOC_DIRECTORY("javadoc.directory", _("isisfish.config.main.javadocDirectory.description"), getUserHome() + File.separator + "isis-docs"), - CONFIG_FILE(CONFIG_FILE_NAME, _("isisfish.config.main.configFileName.description"), CONFIG_FILENAME), - BACKUP_DIRECTORY("backup.directory", _("isisfish.config.main.defaultBackupDirectory.description"), getUserHome() + File.separator + "isis-backup"), - - DEFAULT_EXPORT_DIRECTORY("default.export.directory", _("isisfish.config.main.defaultExportDirectory.description"), getUserHome() + File.separator + "isis-export"), - DEFAULT_EXPORT_NAMES("default.export.names", _("isisfish.config.main.defaultExportNames.description"), ""), - DEFAULT_RESULT_NAMES("default.result.names", _("isisfish.config.main.defaultResultNames.description"), ""), - DEFAULT_MAP_FILENAME("default.map.filename", _("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin"), - DEFAULT_TAG_VALUE("default.tagvalue", _("isisfish.config.main.defaultTagValue.description"), ""), - ENCODING("encoding", _("isisfish.config.main.encoding.description"), "UTF-8"), - JAVADOC_URL("javadoc.url", _("isisfish.config.main.javadocURL.description"), "http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/"), - - SIMULATOR_CLASSFILE("simulator.classfile", _("isisfish.config.main.defaultSimulator.description"), "DefaultSimulator.java"), - /** prevu pour l'architecture de lancement en plugin: local, isis-server, caparmor, ... */ - SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".localDefault", _("isisfish.config.main.localSimulator.description"), InProcessSimulatorLauncher.class.getName()), - SIMULATOR_LAUNCHER_SUB(SimulationService.SIMULATION_LAUNCHER + ".subDefault", _("isisfish.config.main.subSimulator.description"), SubProcessSimulationLauncher.class.getName()), - SIMULATOR_LAUNCHER_REMOTE(SimulationService.SIMULATION_LAUNCHER + ".remoteCaparmor", _("isisfish.config.main.remoteCaparmor.description"), SSHSimulatorLauncher.class.getName()), - - SIMULATOR_SERVER("simulation.server", _("isisfish.config.main.simulationServer.description"), "http://simulateur.ifremer.fr:9090"), - /** le login a utiliser pour les launcher distant, le type du launcher est ajouter a la cle (car 1 login par launcher) */ - SIMULATOR_USER_NAME("simulator.username", _("isisfish.config.main.login.description"), "anonymous"), - SIMULATOR_PASSWORD("simulator.password", _("isisfish.config.main.password.description"), "guest"), - - /** Serveur accessible par ssh : address */ - SIMULATOR_SSH_SERVER("simulation.ssh.server", _("isisfish.config.main.simulation.ssh.server.description"), "caparmor.ifremer.fr"), - /** Serveur accessible par ssh : login */ - SIMULATOR_SSH_USER_NAME("simulation.ssh.username", _("isisfish.config.main.simulation.ssh.username.description"), ""), - /** Serveur accessible par ssh : user home directory */ - SIMULATOR_SSH_USER_HOME("simulation.ssh.userhome", _("isisfish.config.main.simulation.ssh.userhome.description"), ""), - /** Serveur accessible par ssh : remote data path */ - SIMULATOR_SSH_DATAPATH("simulation.ssh.datapath", _("isisfish.config.main.simulation.ssh.datapath.description"), "isis-database-3"), - /** Serveur accessible par ssh : remote isis home install */ - SIMULATOR_SSH_ISIS_HOME("simulation.ssh.isis.home", _("isisfish.config.main.simulation.ssh.isis.home.description"), "/home3/caparmor/poussin/isis-fish"), - /** Serveur accessible par ssh : remote tmp path */ - SIMULATOR_SSH_TMPPATH("simulation.ssh.tmppath", _("isisfish.config.main.simulation.ssh.tmppath.description"), "isis-tmp"), - /** Serveur accessible par SSH : emplacement des executables pbs */ - SIMULATOR_SSH_PBSBINPATH("simulation.ssh.pbsbinpath", _("isisfish.config.main.simulation.ssh.pbsbinpath.description"), "/usr/pbs/bin"), - /** Serveur accessible par SSH : interval de check du fichier de control */ - SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh.control.check.interval", _("isisfish.config.main.simulation.ssh.control.check.interval.description"), "120"), - /** Serveur accessible par SSH : nombre de simulations simultanées sur caparmor */ - SIMULATOR_SSH_MAX_SIMULTANEOUS_SIMULATION("simulation.ssh.max.simultaneous.simulation", _("isisfish.config.main.simulation.max.simultaneous.simulation.description"), "20"), - - LOCALE("locale", _("isisfish.config.main.locale.description"), "fr_FR"), - // REGION_MAP("regionMap", _("isisfish.config.main.regionMap.description"), "maps"), - // RESULT_EXPORT("resultExport", String.class, 15, n_("isisfish.config.main.resultExport.description"), "resultExports"), - SIMULATION_SHOW_ONLY_ERROR("simulationShowOnlyError", _("isisfish.config.main.simulationShowOnlyError.description"), "false"), - // SIMULATION_SHOW_ONLY_QUEUE("simulationShowOnlyQueue", _("isisfish.config.main.simulationShowOnlyQueue.description"), "true"), - - // if false no graphical interface - LAUNCH_UI("launch.ui", _("isisfish.config.main.launchUI.description"), "true"), - - DATABASE_DIRECTORY("database.directory", _("isisfish.config.vcs.localDatabasePath.description"), getUserHome() + File.separator + "isis-database-3"), - - DATABASE_LOCK_MODE("database.lockmode", _("isisfish.config.database.lockmode.description"), "file"), - - // TODO remove duplicated ssh key configuration - SSH_KEY_FILE("ssh.key.file", _("isisfish.config.ssh.key.file.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), - SSH_PASSPHRASE_ENABLED("ssh.passphrase.enabled", _("isisfish.config.vcs.noPassPhrase.description"), "false"), - SSH_PASSPHRASE("ssh.passphrase", _("isisfish.config.vcs.passphrase.description"), ""), - - // can be None, CVS or SVN. only None or SVN work - VCS_TYPE(VCS.VCS_TYPE, _("isisfish.config.vcs.type.description"), VCS.TYPE_SVN), - // depend of VCS_TYPE, for SVN can be svn, svn+ssh, http or file - VCS_PROTOCOLE(VCS.VCS_PROTOCOLE, _("isisfish.config.vcs.useSshConnexion.description"), "svn"), - VCS_SSH_KEY_FILE(VCS.VCS_SSH_KEY_FILE, _("isisfish.config.vcs.keyFile.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), - // user login to access vcs - VCS_USER_NAME(VCS.VCS_USER_NAME, _("isisfish.config.vcs.userName.description"), ""), - VCS_USER_PASSWORD(VCS.VCS_USER_PASSWORD, _("isisfish.config.vcs.userPassword.description"), ""), - VCS_HOST_NAME(VCS.VCS_HOST_NAME, _("isisfish.config.vcs.hostName.description"), "labs.libre-entreprise.org"), - VCS_PATH(VCS.VCS_PATH, _("isisfish.config.vcs.remotePath.description"), "/svnroot/isis-fish-data/"), - // VCS_TAG(VCS.VCS_TAG, _("isisfish.config.vcs.remoteDatabase.description"), "/trunk"), - // TYPE_REPO_PROPERTY_KEY = newConfigPropertyKey("typeRepo", VCSTypeRepo.class, 9, n_("isisfish.config.vcs.typeRepo.description"), "TAG"), - // PROJECT_NAME_PROPERTY_KEY = newConfigPropertyKey("projectName", String.class, 11, n_("isisfish.config.main.projectName.description"), "Isis-Fish"), - - USER_NAME("user.name", _("isisfish.config.main.userName.description"), System.getProperty("user.name")), - SMTP_SERVER("smtpServer", _("isisfish.config.main.smtpServer.description"), "smtp"), - USER_MAIL("userMail", _("isisfish.config.main.userMail.description"), USER_NAME.key + "@" + VCS_HOST_NAME.key); - - public final String key; - public final String description; - public final String defaultValue; - - private Option(String key, String description, String defaultValue) { - this.key = key; - this.description = description; - this.defaultValue = defaultValue; - } - } - - ////////////////////////////////////////////////// - // Toutes les actions disponibles - ////////////////////////////////////////////////// - - public static enum Action { - HELP(_("Show help"), OtherAction.class.getName() + "#help", "-h", "--help"), - - IMPORT_ANALYSE_PLAN(_(""), ImportAction.class.getName() + "#importAnalysePlan", "--importAnalysePlan"), - IMPORT_EXPORT(_(""), ImportAction.class.getName() + "#importExport", "--importExport"), - IMPORT_RULE(_(""), ImportAction.class.getName() + "#importRule", "--importRule"), - IMPORT_SCRIPT(_("Import one java file script source"), ImportAction.class.getName() + "#importScript", "--importScript"), - IMPORT_SIMULATOR(_(""), ImportAction.class.getName() + "#importSimulator", "--importSimulator"), - IMPORT_FORMULA(_(""), ImportAction.class.getName() + "#importFormula", "--importFormula"), - IMPORT_REGION(_(""), ImportAction.class.getName() + "#importRegion", "--importRegion"), - IMPORT_REGION_AND_RENAME(_(""), ImportAction.class.getName() + "#importRegionAndRename", "--importRegionAndRename"), - IMPORT_SIMULATION(_(""), ImportAction.class.getName() + "#importSimulation", "--importSimulation"), - IMPORT_SCRIPT_MODULE(_("Import zipped file containing all scripts directory structure"), ImportAction.class.getName() + "#importScriptModule", "--importScriptModule"), - - LIST_ANALYSE_PLAN(_(""), ExportAction.class.getName() + "#listAnalysePlan", "--listAnalysePlan"), - LIST_EXPORT(_(""), ExportAction.class.getName() + "#listExport", "--listExport"), - LIST_RULE(_(""), ExportAction.class.getName() + "#listRule", "--listRule"), - LIST_SCRIPT(_(""), ExportAction.class.getName() + "#listScript", "--listScript"), - LIST_SIMULATOR(_(""), ExportAction.class.getName() + "#listSimulator", "--listSimulator"), - LIST_FORMULA(_(""), ExportAction.class.getName() + "#listFormula", "--listFormula"), - LIST_REGION(_(""), ExportAction.class.getName() + "#listRegion", "--listRegion"), - LIST_SIMULATION(_(""), ExportAction.class.getName() + "#listSimulation", "--listSimulation"), - - EXPORT_ANALYSE_PLAN(_(""), ExportAction.class.getName() + "#exportAnalysePlan", "--exportAnalysePlan"), - EXPORT_EXPORT(_(""), ExportAction.class.getName() + "#exportExport", "--exportExport"), - EXPORT_RULE(_(""), ExportAction.class.getName() + "#exportRule", "--exportRule"), - EXPORT_SCRIPT(_(""), ExportAction.class.getName() + "#exportScript", "--exportScript"), - EXPORT_SIMULATOR(_(""), ExportAction.class.getName() + "#exportSimulator", "--exportSimulator"), - EXPORT_FORMULA(_(""), ExportAction.class.getName() + "#exportFormula", "--exportFormula"), - EXPORT_REGION(_(""), ExportAction.class.getName() + "#exportRegion", "--exportRegion"), - EXPORT_SIMULATION(_(""), ExportAction.class.getName() + "#exportSimulation", "--exportSimulation"), - - VCS_SSH_CREATE_KEY(_(""), VCSAction.class.getName() + "#sshCreateKey", "--sshCreateKey"), - VCS_UPDATE(_(""), VCSAction.class.getName() + "#vcsUpdate", "--vcsUpdate"), - VCS_ADD(_(""), VCSAction.class.getName() + "#vcsAdd", "--vcsAdd"), - VCS_REMOVE(_(""), VCSAction.class.getName() + "#vcsRemove", "--vcsRemove"), - VCS_COMMIT(_(""), VCSAction.class.getName() + "#vcsCommit", "--vcsCommit"), - - SIMULATE_WITH_REGION(_(""), SimulationAction.class.getName() + "#simulateWithRegion", "--simulateWithRegion"), - SIMULATE_WITH_SIMULATION(_(""), SimulationAction.class.getName() + "#simulateWithSimulation", "--simulateWithSimulation"), - SIMULATE_WITH_SIMULATION_AND_SCRIPT(_(""), SimulationAction.class.getName() + "#simulateWithSimulationAndScript", "--simulateWithSimulationAndScript"), - SIMULATE_REMOTELLY(_(""), SimulationAction.class.getName() + "#simulateRemotelly", "--simulateRemotelly"), - SIMULATE_REMOTELLY_WITH_PRESCRIPT(_(""), SimulationAction.class.getName() + "#simulateRemotellyWithPreScript", "--simulateRemotellyWithPreScript"); - - public String description; - public String action; - public String[] aliases; - - private Action(String description, String action, String ... aliases) { - this.description = description; - this.action = action; - this.aliases = aliases; - } - } -} Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java (from rev 2496, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,1001 @@ +/* *##% + * Copyright (C) 2002-2009 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * ##%*/ + +package fr.ifremer.isisfish; + +import static org.codelutin.i18n.I18n._; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.apache.commons.beanutils.ConvertUtils; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.util.ApplicationConfig; +import org.codelutin.util.ArgumentsParserException; +import org.codelutin.util.StringUtil; +import org.codelutin.util.VersionNumber; + +import fr.ifremer.isisfish.actions.ExportAction; +import fr.ifremer.isisfish.actions.ImportAction; +import fr.ifremer.isisfish.actions.OtherAction; +import fr.ifremer.isisfish.actions.SimulationAction; +import fr.ifremer.isisfish.actions.VCSAction; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher; +import fr.ifremer.isisfish.simulator.launcher.SimulationService; +import fr.ifremer.isisfish.simulator.launcher.SSHSimulatorLauncher; +import fr.ifremer.isisfish.simulator.launcher.SubProcessSimulationLauncher; +import fr.ifremer.isisfish.vcs.VCS; + +/** + * Isis fish configuration. + * + * @author poussin + * @version $Revision: 1310 $ + * + * Last update: $Date: 2008-08-23 00:46:00 +0200 (Sat, 23 Aug 2008) $ + * by : $Author: bpoussin $ + */ +public class IsisConfig extends ApplicationConfig { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(IsisConfig.class); + + /** + * Config step after init. + * + * Refactored, can't be in enum + * + * @see org.codelutin.util.ApplicationConfig.Action.Step + */ + public static final int STEP_AFTER_INIT = 0; + + /** + * Config step after init vcs. + * + * Refactored, can't be in enum + * + * @see org.codelutin.util.ApplicationConfig.Action.Step + */ + public static final int STEP_AFTER_INIT_VCS = 1; + + /** + * Config step after ui. + * + * Refactored, can't be in enum + * + * @see org.codelutin.util.ApplicationConfig.Action.Step + */ + public static final int STEP_AFTER_UI = 2; + + /** + * Config step before exit. + * + * Refactored, can't be in enum + * + * @see org.codelutin.util.ApplicationConfig.Action.Step + */ + public static final int STEP_BEFORE_EXIT = 3; + + /** + * La version du logiciel constitue de l.d.a.r + * <li>l: le numero de version du logiciel + * <li>d: le numero de version du schema de la base de donnees + * <li>a: le numero de version de l'api des scripts + * <li>r: le numero de version de de l'interface graphique ou autre modif mineur + * <p> + * lors de l'increment de l, d, a et r sont remis a 0 + * lors de l'increment de d, a et r sont remis a 0 + * lors de l'increment de a, r est remis a 0 + * <p> + * Un changement d'UI ne modifie jamais le numero de version de database + * Un changement de schema de base pour lequel on ne peut pas faire de + * migration de donnees demande automatiquement un changement de version + * d'application. + */ + protected final static VersionNumber version = new VersionNumber(3, 2, 0, 5); + protected final static VersionNumber databaseVersion = new VersionNumber( + version.getNumber(0), version.getNumber(1)); + protected final static VersionNumber apiVersion = new VersionNumber( + version.getNumber(0), version.getNumber(1), version.getNumber(2)); + + public static VersionNumber getVersionNumber() { + return version; + } + + /** + * le nombre global ex: 3.2.0.0 + * @return + */ + static public String getVersion() { + String result = version.toString(); + return result; + } + + /** + * La version de la base ex: 3.2 + * @return + */ + public static VersionNumber getDatabaseVersion() { + return databaseVersion; + } + + /** + * La version de l'api de programmation ex: 3.2.0 + * @return + */ + public static VersionNumber getApiVersion() { + return apiVersion; + } + + static final public String COPYRIGHT_TEXT = "Version " + getVersion() + " IFREMER-MAERHA © 2000-2009"; + static final public String CONFIG_FILENAME = "isis-config-" + version.getNumber(0); + + /** separateur de liste */ + static final public String SEP = ","; + static final public String REPORT_EMAIL = "isis-fish-bugreport at lists.labs.libre-entreprise.org"; + + protected transient File backupSessionDirectory = null; + protected long startingTime = System.nanoTime(); + + public IsisConfig() { + + for (Option o : Option.values()) { + setDefaultOption(o.key, o.defaultValue); + } + + for (Action a : Action.values()) { + for (String alias : a.aliases) { + addActionAlias(alias, a.action); + } + } + + } + + ////////////////////////////////////////////////// + // Methode d'acces aux options + ////////////////////////////////////////////////// + + /** + * Retourne le repertoire racine de toutes les donnees (script, simulation + * region, ...) + * @return + */ + public File getDatabaseDirectory() { + File result = getOptionAsFile(Option.DATABASE_DIRECTORY.key); + return result; + } + + /** + * Retourne le lock a utiliser pour la base h2. + * + * Par defaut la base utilise 'file'. + * + * Les valeurs acceptées sont : + * - file + * - socket + * - no + * + * http://www.h2database.com/html/features.html#database_file_locking + * + * @return h2 db lock mode + */ + public String getDatabaseLockMode() { + String result = getOption(Option.DATABASE_LOCK_MODE.key); + return result; + } + + /** + * Retourne le repertoire ou sont stockes les scripts compiles. + * + * Create directory if not exists. + * + * @return compilation directory + */ + public File getCompileDirectory() { + File result = getOptionAsFile(Option.COMPILATION_DIRECTORY.key); + if (!result.exists()) { + result.mkdirs(); + } + return result; + } + + /** + * Get javadoc directory. + * + * Create directory if not exists. + * + * @return javadoc directory + */ + public File getJavadocDirectory() { + File result = getOptionAsFile(Option.COMPILATION_DIRECTORY.key); + if (!result.exists()) { + result.mkdirs(); + } + return result; + } + + /** + * Retourne l'objet {@link Locale} a utilise pour la langue. + * + * @return application {@link Locale} + */ + public Locale getLocale() { + String value = getOption(Option.LOCALE.key); + Locale result = (Locale)ConvertUtils.convert(value, Locale.class); + return result; + } + + /** + * Retourne l'encoding a utiliser pour les fichiers textes + * @return + */ + public String getEncoding() { + String result = getOption(Option.ENCODING.key); + return result; + } + + /** + * Retourne le serveur SMTP a utiliser pour l'envoie de mail + * @return + */ + public String getSmtpServer() { + String result = getOption(Option.SMTP_SERVER.key); + return result; + } + + /** + * Retourne le nom usuel de l'utilisateur + * @return + */ + public String getUserName() { + String result = getOption(Option.USER_NAME.key); + return result; + } + + /** + * Retourne l'email de l'utilisateur + * @return + */ + public String getUserMail() { + String result = getOption(Option.USER_MAIL.key); + return result; + } + + /** + * Retourne l'url du serveur de simulation + * @return simulator server + */ + public String getSimulatorServer() { + String result = getOption(Option.SIMULATOR_SERVER.key); + return result; + } + + /** + * Retourne le login pour acceder au serveur de simulation + * @return simulator username + */ + public String getSimulatorUsername() { + String result = getOption(Option.SIMULATOR_USER_NAME.key); + return result; + } + + /** + * Retourne le mot de passe pour acceder au serveur de simulation + * @return simulator password + */ + public String getSimulatorPassword() { + String result = getOption(Option.SIMULATOR_PASSWORD.key); + return result; + } + + public String getSimulatorClassfile() { + String result = getOption(Option.SIMULATOR_CLASSFILE.key); + return result; + } + + public void setSimulatorClassfile(String value) { + setOption(Option.SIMULATOR_CLASSFILE.key, value); + } + + /** + * Retourne l'url du serveur de simulation accessible via SSH. + * + * @return simulator server + */ + public String getSimulatorSshServer() { + String result = getOption(Option.SIMULATOR_SSH_SERVER.key); + return result; + } + + /** + * Change ssh server url value. + * + * @param sshServer + */ + public void setSimulatorSshServer(String sshServer) { + setOption(Option.SIMULATOR_SSH_SERVER.key, sshServer); + } + + /** + * Retourne le login pour acceder au serveur de simulation accessible via SSH. + * + * @return simulator username + */ + public String getSimulatorSshUsername() { + String result = getOption(Option.SIMULATOR_SSH_USER_NAME.key); + return result; + } + + /** + * Change ssh username. + * + * @param username username + */ + public void setSimulatorSshUsername(String username) { + setOption(Option.SIMULATOR_SSH_USER_NAME.key, username); + } + + /** + * Retourne le chemin relatif ou abs du repertoire root des données d'isis. + * + * @return simulator data path + */ + public String getSimulatorSshDataPath() { + String result = getOption(Option.SIMULATOR_SSH_DATAPATH.key); + return result; + } + + /** + * Change remote datapath. + * + * @param datapath datapath + */ + public void setSimulatorSshDataPath(String datapath) { + setOption(Option.SIMULATOR_SSH_DATAPATH.key, datapath); + } + + /** + * Get remote user home directory. + * + * @return remote user home + */ + public String getSimulatorSshUserHome() { + String result = getOption(Option.SIMULATOR_SSH_USER_HOME.key); + return result; + } + + /** + * Change isis remote home directory. + * + * @param userhome new remote home + */ + public void setSimulatorSshUserHome(String userhome) { + setOption(Option.SIMULATOR_SSH_USER_HOME.key, userhome); + } + + /** + * Retourne le chemin distant ou est installé isis. + * + * @return remote isis home + */ + public String getSimulatorSshIsisHome() { + String result = getOption(Option.SIMULATOR_SSH_ISIS_HOME.key); + return result; + } + + /** + * Change isis home on ssh server. + * + * @param isishome isis home + */ + public void setSimulatorSshIsisHome(String isishome) { + setOption(Option.SIMULATOR_SSH_ISIS_HOME.key, isishome); + } + + /** + * Retourne l'emplacement du dossier temporaire distant. + * + * Ce dossier doit être ABSOLUT. + * + * @return tmp dir + */ + public String getSimulatorSshTmpPath() { + String result = getOption(Option.SIMULATOR_SSH_TMPPATH.key); + return result; + } + + /** + * Change ssh temp path. + * + * @param sshtemppath temp path + */ + 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); + } + + /** + * Retourne l'interval de temps a utiliser + * pour recuperer le fichier de control. + * + * @return time (in seconds) + */ + public long getSimulatorSshControlCheckInterval() { + int result = getOptionAsInt(Option.SIMULATOR_SSH_CONTROLCHECKINTERVAL.key); + return result; + } + + /** + * Change control check interval. + * + * @param interval interval + */ + public void setSimulatorSshControlCheckInterval(long interval) { + setOption(Option.SIMULATOR_SSH_CONTROLCHECKINTERVAL.key, String.valueOf(interval)); + } + + /** + * Retourne le nombre simultané de simulations authorisées sur + * caparmor. + * + * Utilisé pour l'envoie des simulations. + * + * @return le nombre de simulations authorisé + */ + public int getSimulatorSshMaxSimultaneousSimulation() { + int result = getOptionAsInt(Option.SIMULATOR_SSH_MAX_SIMULTANEOUS_SIMULATION.key); + return result; + } + + /** + * Change max simultaneous simulation at a time. + * + * @param max max + */ + public void setSimulatorSshMaxSimultaneousSimulation(int max) { + setOption(Option.SIMULATOR_SSH_MAX_SIMULTANEOUS_SIMULATION.key, String.valueOf(max)); + } + + /** + * Retourne la clé privée de l'utilisteur courant. + * + * @return private ssh key path + */ + public File getSSHPrivateKeyFilePath() { + File result = getOptionAsFile(Option.SSH_KEY_FILE.key); + return result; + } + + /** + * Set ssh private key file path. + * + * @param sshFile new value + */ + public void setSSHPrivateKeyFilePath(File sshFile) { + setOption(Option.SSH_KEY_FILE.key, sshFile.getAbsolutePath()); + } + + /* + * Le type de simulation par defaut a utiliser (local, remote, ...) + * @return + *) + public boolean isSimulatorLocal() { + // FIXME never called + String value = getOption(Option.SIMULATOR_LAUNCHER.key); + // and following code always return false : + boolean result = "local".equalsIgnoreCase(value); + return result; + }*/ + + /*public boolean isUseVCS() { + String value = getOption(Option.VCS_TYPE.key); + boolean result = !VCSNone.TYPE_NONE.equals(value); + return result; + }*/ + + public boolean isLaunchUI() { + boolean result = getOptionAsBoolean(Option.LAUNCH_UI.key); + return result; + } + + public void setSimulatorLauncher(String value) { + setOption(Option.SIMULATOR_LAUNCHER.key, value); + } + +// public boolean isSimulationShowOnlyQueue() { +// Boolean result = getOptionAsBoolean(Option.SIMULATION_SHOW_ONLY_QUEUE.key); +// return result; +// } + + public boolean isSimulationShowOnlyError() { + Boolean result = getOptionAsBoolean(Option.SIMULATION_SHOW_ONLY_ERROR.key); + return result; + } + + public File getDefaultExportDirectory() { + File result = getOptionAsFile(Option.DEFAULT_EXPORT_DIRECTORY.key); + if (!result.exists()) { + result.mkdirs(); + } + return result; + } + + public void setDefaultExportDirectory(String value) { + setOption(Option.DEFAULT_EXPORT_DIRECTORY.key, value); + } + + public String getDefaultExportNames() { + String result = getOption(Option.DEFAULT_EXPORT_NAMES.key); + return result; + } + + public void setDefaultExportNames(List<String> exportNames) { + StringBuilder sb = new StringBuilder(); + for (String exportName : exportNames) { + sb.append(SEP).append(exportName); + } + String value = sb.toString(); + // remove first SEP + if (value.length() > 0) { + value = value.substring(1); + } + setOption(Option.DEFAULT_EXPORT_NAMES.key, value); + saveForUser(); + } + + /** + * @return la liste des noms d'exports par defaut sous forme de liste, + * a partir de la propriete {@link Option#DEFAULT_EXPORT_NAMES} + * ou null si ils n'ont jamais ete sauves par l'utilisateur. + * by user. + * @see Option#DEFAULT_EXPORT_NAMES + */ + public List<String> getDefaultExportNamesAsList() { + List<String> result = null; + String exportNamesList = getDefaultExportNames(); + if (exportNamesList != null) { + result = new ArrayList<String>(); + String[] exportNames = StringUtil.split(exportNamesList, ","); + result.addAll(Arrays.asList(exportNames)); + } + return result; + } + + public String getDefaultMapFilename() { + String result = getOption(Option.DEFAULT_MAP_FILENAME.key); + return result; + } + + public String getDefaultResultNames() { + String result = getOption(Option.DEFAULT_RESULT_NAMES.key); + return result; + } + + public void setDefaultResultNames(List<String> resultNames) { + StringBuilder sb = new StringBuilder(); + for (String resultName : resultNames) { + sb.append(SEP).append(resultName); + } + String value = sb.toString(); + // remove first SEP + if (value.length() > 0) { + value = value.substring(1); + } + setOption(Option.DEFAULT_RESULT_NAMES.key, value); + saveForUser(); + } + + /** + * @return les resultats par defaut d'une simulation sous forme de liste + * a partir de la propriete {@link Option#DEFAULT_RESULT_NAMES} + * @see Option#DEFAULT_RESULT_NAMES + */ + public List<String> getDefaultResultNamesAsList() { + List<String> result = null; + String resultNamesList = getDefaultResultNames(); + if (resultNamesList != null) { + result = new ArrayList<String>(); + String[] resultNames = StringUtil.split(resultNamesList, ","); + result.addAll(Arrays.asList(resultNames)); + } + return result; + } + + public String getDefaultTagValue() { + String result = getOption(Option.DEFAULT_TAG_VALUE.key); + return result; + } + + public void setDefaultTagValues(Map<String, String> tagValues) { + StringBuilder sb = new StringBuilder(" "); + for (Map.Entry<String, String> entry : tagValues.entrySet()) { + sb.append(SEP).append('"').append(entry.getKey()).append("\":\"").append(entry.getValue()).append('"'); + } + String value = sb.toString().trim(); + setOption(Option.DEFAULT_TAG_VALUE.key, value.isEmpty() ? "" : value.substring(1)); + saveForUser(); + } + + + + /** + * @return le dictionnaire des tags par defaut d'une simulation a partir + * de la propriete {@link Option#DEFAULT_TAG_VALUE} + * @see Option#DEFAULT_TAG_VALUE + */ + public Map<String, String> getDefaultTagValueAsMap() { + Map<String, String> result = new HashMap<String, String>(); + String tagValuesList = getDefaultTagValue(); + if (tagValuesList != null) { + String[] tagValues = StringUtil.split(tagValuesList, ","); + for (String tagValue : tagValues) { + String[] tagAndValue = StringUtil.split(tagValue, ":"); + + String tag = tagAndValue[0].trim(); + tag = tag.substring(1, tag.length() - 1); // remove "..." + + String value = tagAndValue[1].trim(); + value = value.substring(1, value.length() - 1); // remove "..." + + result.put(tag, value); + } + } + return result; + } + + public String getJavadocURL() { + String result = getOption(Option.JAVADOC_URL.key); + return result; + } + + public File getBackupDirectory() { + File result = getOptionAsFile(Option.BACKUP_DIRECTORY.key); + return result; + } + + public long getStartingTime() { + return startingTime; + } + + public String getElapsedTimeAsString() { + long diff = System.nanoTime() - getStartingTime(); + String result = DurationFormatUtils.formatDuration(diff / 1000000, "s'.'S"); + return result; + } + + public File getBackupSessionDirectory() { + if (backupSessionDirectory == null) { + // le timestamp est en nano (on le veut en ms) + long time = getStartingTime() / 1000; + // creation de l'unique répertoire de backup pour la session + String path = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new java.util.Date(time)); + backupSessionDirectory = new File(getBackupDirectory(), path); + if (!backupSessionDirectory.exists()) { + backupSessionDirectory.mkdirs(); + } + } + return backupSessionDirectory; + } + + /** + * Retourne un class loader contenant le repertoire de compilation + * Il permet alors de charger des classes qui viennent d'etre compilees + * dans isis + * If current thread is in simulation then return specific simulation + * compilation directory, else default compilation directory + * + * @return the class loader adequate + */ + public ClassLoader getScriptClassLoader() { + SimulationContext simContext = SimulationContext.get(); + ClassLoader result = simContext.getClassLoader(); + if (result == null) { + // on est pas dans une simulation, il faut retourner un nouveau + // a chaque fois. on force la creation d'un nouveau classloader + // a chaque fois pour + // que l'ancienne class compiler et charg<E9> ne soit pas presente + File f = getCompileDirectory(); + try { + URL[] cp = new URL[]{f.toURI().toURL()}; + // il faut prendre le ClassLoader du thread courant comme parent + // car pour les simulations il a ete modifi<E9>, et il faut + // que les classes de script soit recherch<E9> dedans avant + // la recherche dans le getCompileDirectory(). + // ce qui est le cas avec les URLClassLoader + ClassLoader parent = Thread.currentThread().getContextClassLoader(); + result = new URLClassLoader(cp, parent); + } catch (MalformedURLException eee) { + throw new IsisFishRuntimeException(_("isisfish.error.load.classloader", f, eee.getMessage()), eee); + } + } + return result; + } + + /** + * Surcharge pour la migration des options de config qui ont change de nom + * <p> + * TODO: lors du passage en version 4.0 on pourrait supprimer cette methode + * + * @param args + * @throws org.codelutin.util.ArgumentsParserException + */ + @Override + public void parse(String[] args) throws ArgumentsParserException { + super.parse(args); + // dans la version precedente (3.1) seul le fichier user existe, il est + // donc le seul a devoir etre modifie + boolean mustSave = false; + String[] keys = new String[]{ + "compileDirectory", Option.COMPILATION_DIRECTORY.key, + "defaultBackupDirectory", Option.BACKUP_DIRECTORY.key, + "defaultExportDirectory", Option.DEFAULT_EXPORT_DIRECTORY.key, + "defaultExportNames", Option.DEFAULT_EXPORT_NAMES.key, + "defaultMapFile", Option.DEFAULT_MAP_FILENAME.key, + "defaultResultNames", Option.DEFAULT_RESULT_NAMES.key, + "defaultSimulator", Option.SIMULATOR_CLASSFILE.key, + "defaultTagValue", Option.DEFAULT_TAG_VALUE.key, + "javadocURL", Option.JAVADOC_URL.key, + "locale", Option.LOCALE.key, + "login", Option.SIMULATOR_USER_NAME.key, + "password", Option.SIMULATOR_PASSWORD.key, + "simulationServer", Option.SIMULATOR_SERVER.key, + "simulationShowOnlyError", Option.SIMULATION_SHOW_ONLY_ERROR.key, + "simulationShowOnlyQueue", null, // Option.SIMULATION_SHOW_ONLY_QUEUE.key, + "smtpServer", Option.SMTP_SERVER.key, + "userMail", Option.USER_MAIL.key, + "userName", Option.USER_NAME.key, + "vcs.keyFile", Option.VCS_SSH_KEY_FILE.key, + "vcs.localDatabasePath", Option.DATABASE_DIRECTORY.key, + // on supprime car non compatible, les valeurs par defaut sont tres bien + "localSimulator", null, + "vcs.databaseVersion", null, + "vcs.hostName", null, + "vcs.noPassPhrase", null, + "vcs.remoteDatabase", null, + "vcs.remotePath", null, + "vcs.type", null, + "vcs.typeRepo", null, + "vcs.useSshConnexion", null, + "vcs.userName", null, + "version", null, + "projectName", null, + "simulationReportMail", null, + + }; + + if (log.isInfoEnabled()) { + log.info("Check configuration change"); + } + + for(int i=0; i<keys.length;) { + String oldKey = keys[i++]; + String newKey = keys[i++]; + if (!oldKey.equals(newKey)) { + String value = getOption(oldKey); + if (value != null) { + mustSave = true; + // quoi qu'il arrive on enleve l'ancienne cle + homefile.remove(oldKey); + if (newKey != null) { + setOption(newKey, value); + } + } + } + } + if (mustSave) { + saveForUser(); + if (log.isInfoEnabled()) { + log.info("Config file migration done"); + } + } + if (log.isDebugEnabled()) { + printConfig(); + } + } + + ////////////////////////////////////////////////// + // Toutes les options disponibles + ////////////////////////////////////////////////// + + /** + * Options. + * + * Set it protected to force getOption() call. + */ + public static enum Option { + + COMPILATION_DIRECTORY("compilation.directory", _("isisfish.config.main.compileDirectory.description"), getUserHome() + File.separator + "isis-build"), + JAVADOC_DIRECTORY("javadoc.directory", _("isisfish.config.main.javadocDirectory.description"), getUserHome() + File.separator + "isis-docs"), + CONFIG_FILE(CONFIG_FILE_NAME, _("isisfish.config.main.configFileName.description"), CONFIG_FILENAME), + BACKUP_DIRECTORY("backup.directory", _("isisfish.config.main.defaultBackupDirectory.description"), getUserHome() + File.separator + "isis-backup"), + + DEFAULT_EXPORT_DIRECTORY("default.export.directory", _("isisfish.config.main.defaultExportDirectory.description"), getUserHome() + File.separator + "isis-export"), + DEFAULT_EXPORT_NAMES("default.export.names", _("isisfish.config.main.defaultExportNames.description"), ""), + DEFAULT_RESULT_NAMES("default.result.names", _("isisfish.config.main.defaultResultNames.description"), ""), + DEFAULT_MAP_FILENAME("default.map.filename", _("isisfish.config.main.defaultMapFile.description"), "maps/vmap_area_thin"), + DEFAULT_TAG_VALUE("default.tagvalue", _("isisfish.config.main.defaultTagValue.description"), ""), + ENCODING("encoding", _("isisfish.config.main.encoding.description"), "UTF-8"), + JAVADOC_URL("javadoc.url", _("isisfish.config.main.javadocURL.description"), "http://isis-fish.labs.libre-entreprise.org/isis-fish/apidocs/"), + + SIMULATOR_CLASSFILE("simulator.classfile", _("isisfish.config.main.defaultSimulator.description"), "DefaultSimulator.java"), + /** prevu pour l'architecture de lancement en plugin: local, isis-server, caparmor, ... */ + //SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".localDefault", _("isisfish.config.main.localSimulator.description"), InProcessSimulatorLauncher.class.getName()), + SIMULATOR_LAUNCHER(SimulationService.SIMULATION_LAUNCHER + ".localSubProcessDefault", _("isisfish.config.main.subSimulator.description"), SubProcessSimulationLauncher.class.getName()), + SIMULATOR_LAUNCHER_REMOTE(SimulationService.SIMULATION_LAUNCHER + ".remoteCaparmor", _("isisfish.config.main.remoteCaparmor.description"), SSHSimulatorLauncher.class.getName()), + + SIMULATOR_SERVER("simulation.server", _("isisfish.config.main.simulationServer.description"), "http://simulateur.ifremer.fr:9090"), + /** le login a utiliser pour les launcher distant, le type du launcher est ajouter a la cle (car 1 login par launcher) */ + SIMULATOR_USER_NAME("simulator.username", _("isisfish.config.main.login.description"), "anonymous"), + SIMULATOR_PASSWORD("simulator.password", _("isisfish.config.main.password.description"), "guest"), + + /** Serveur accessible par ssh : address */ + SIMULATOR_SSH_SERVER("simulation.ssh.server", _("isisfish.config.main.simulation.ssh.server.description"), "caparmor.ifremer.fr"), + /** Serveur accessible par ssh : login */ + SIMULATOR_SSH_USER_NAME("simulation.ssh.username", _("isisfish.config.main.simulation.ssh.username.description"), ""), + /** Serveur accessible par ssh : user home directory */ + SIMULATOR_SSH_USER_HOME("simulation.ssh.userhome", _("isisfish.config.main.simulation.ssh.userhome.description"), ""), + /** Serveur accessible par ssh : remote data path */ + SIMULATOR_SSH_DATAPATH("simulation.ssh.datapath", _("isisfish.config.main.simulation.ssh.datapath.description"), "isis-database-3"), + /** Serveur accessible par ssh : remote isis home install */ + SIMULATOR_SSH_ISIS_HOME("simulation.ssh.isis.home", _("isisfish.config.main.simulation.ssh.isis.home.description"), "/home3/caparmor/poussin/isis-fish"), + /** Serveur accessible par ssh : remote tmp path */ + SIMULATOR_SSH_TMPPATH("simulation.ssh.tmppath", _("isisfish.config.main.simulation.ssh.tmppath.description"), "isis-tmp"), + /** Serveur accessible par SSH : emplacement des executables pbs */ + SIMULATOR_SSH_PBSBINPATH("simulation.ssh.pbsbinpath", _("isisfish.config.main.simulation.ssh.pbsbinpath.description"), "/usr/pbs/bin"), + /** Serveur accessible par SSH : interval de check du fichier de control */ + SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh.control.check.interval", _("isisfish.config.main.simulation.ssh.control.check.interval.description"), "120"), + /** Serveur accessible par SSH : nombre de simulations simultanées sur caparmor */ + SIMULATOR_SSH_MAX_SIMULTANEOUS_SIMULATION("simulation.ssh.max.simultaneous.simulation", _("isisfish.config.main.simulation.max.simultaneous.simulation.description"), "20"), + + LOCALE("locale", _("isisfish.config.main.locale.description"), "fr_FR"), + // REGION_MAP("regionMap", _("isisfish.config.main.regionMap.description"), "maps"), + // RESULT_EXPORT("resultExport", String.class, 15, n_("isisfish.config.main.resultExport.description"), "resultExports"), + SIMULATION_SHOW_ONLY_ERROR("simulationShowOnlyError", _("isisfish.config.main.simulationShowOnlyError.description"), "false"), + // SIMULATION_SHOW_ONLY_QUEUE("simulationShowOnlyQueue", _("isisfish.config.main.simulationShowOnlyQueue.description"), "true"), + + // if false no graphical interface + LAUNCH_UI("launch.ui", _("isisfish.config.main.launchUI.description"), "true"), + + DATABASE_DIRECTORY("database.directory", _("isisfish.config.vcs.localDatabasePath.description"), getUserHome() + File.separator + "isis-database-3"), + + DATABASE_LOCK_MODE("database.lockmode", _("isisfish.config.database.lockmode.description"), "file"), + + // TODO remove duplicated ssh key configuration + SSH_KEY_FILE("ssh.key.file", _("isisfish.config.ssh.key.file.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), + SSH_PASSPHRASE_ENABLED("ssh.passphrase.enabled", _("isisfish.config.vcs.noPassPhrase.description"), "false"), + SSH_PASSPHRASE("ssh.passphrase", _("isisfish.config.vcs.passphrase.description"), ""), + + // can be None, CVS or SVN. only None or SVN work + VCS_TYPE(VCS.VCS_TYPE, _("isisfish.config.vcs.type.description"), VCS.TYPE_SVN), + // depend of VCS_TYPE, for SVN can be svn, svn+ssh, http or file + VCS_PROTOCOLE(VCS.VCS_PROTOCOLE, _("isisfish.config.vcs.useSshConnexion.description"), "svn"), + VCS_SSH_KEY_FILE(VCS.VCS_SSH_KEY_FILE, _("isisfish.config.vcs.keyFile.description"), getUserHome() + File.separator + ".ssh" + File.separator + "isis_rsa"), + // user login to access vcs + VCS_USER_NAME(VCS.VCS_USER_NAME, _("isisfish.config.vcs.userName.description"), ""), + VCS_USER_PASSWORD(VCS.VCS_USER_PASSWORD, _("isisfish.config.vcs.userPassword.description"), ""), + VCS_HOST_NAME(VCS.VCS_HOST_NAME, _("isisfish.config.vcs.hostName.description"), "labs.libre-entreprise.org"), + VCS_PATH(VCS.VCS_PATH, _("isisfish.config.vcs.remotePath.description"), "/svnroot/isis-fish-data/"), + // VCS_TAG(VCS.VCS_TAG, _("isisfish.config.vcs.remoteDatabase.description"), "/trunk"), + // TYPE_REPO_PROPERTY_KEY = newConfigPropertyKey("typeRepo", VCSTypeRepo.class, 9, n_("isisfish.config.vcs.typeRepo.description"), "TAG"), + // PROJECT_NAME_PROPERTY_KEY = newConfigPropertyKey("projectName", String.class, 11, n_("isisfish.config.main.projectName.description"), "Isis-Fish"), + + USER_NAME("user.name", _("isisfish.config.main.userName.description"), System.getProperty("user.name")), + SMTP_SERVER("smtpServer", _("isisfish.config.main.smtpServer.description"), "smtp"), + USER_MAIL("userMail", _("isisfish.config.main.userMail.description"), USER_NAME.key + "@" + VCS_HOST_NAME.key); + + public final String key; + public final String description; + public final String defaultValue; + + private Option(String key, String description, String defaultValue) { + this.key = key; + this.description = description; + this.defaultValue = defaultValue; + } + } + + ////////////////////////////////////////////////// + // Toutes les actions disponibles + ////////////////////////////////////////////////// + + public static enum Action { + HELP(_("Show help"), OtherAction.class.getName() + "#help", "-h", "--help"), + + IMPORT_ANALYSE_PLAN(_(""), ImportAction.class.getName() + "#importAnalysePlan", "--importAnalysePlan"), + IMPORT_EXPORT(_(""), ImportAction.class.getName() + "#importExport", "--importExport"), + IMPORT_RULE(_(""), ImportAction.class.getName() + "#importRule", "--importRule"), + IMPORT_SCRIPT(_("Import one java file script source"), ImportAction.class.getName() + "#importScript", "--importScript"), + IMPORT_SIMULATOR(_(""), ImportAction.class.getName() + "#importSimulator", "--importSimulator"), + IMPORT_FORMULA(_(""), ImportAction.class.getName() + "#importFormula", "--importFormula"), + IMPORT_REGION(_(""), ImportAction.class.getName() + "#importRegion", "--importRegion"), + IMPORT_REGION_AND_RENAME(_(""), ImportAction.class.getName() + "#importRegionAndRename", "--importRegionAndRename"), + IMPORT_SIMULATION(_(""), ImportAction.class.getName() + "#importSimulation", "--importSimulation"), + IMPORT_SCRIPT_MODULE(_("Import zipped file containing all scripts directory structure"), ImportAction.class.getName() + "#importScriptModule", "--importScriptModule"), + + LIST_ANALYSE_PLAN(_(""), ExportAction.class.getName() + "#listAnalysePlan", "--listAnalysePlan"), + LIST_EXPORT(_(""), ExportAction.class.getName() + "#listExport", "--listExport"), + LIST_RULE(_(""), ExportAction.class.getName() + "#listRule", "--listRule"), + LIST_SCRIPT(_(""), ExportAction.class.getName() + "#listScript", "--listScript"), + LIST_SIMULATOR(_(""), ExportAction.class.getName() + "#listSimulator", "--listSimulator"), + LIST_FORMULA(_(""), ExportAction.class.getName() + "#listFormula", "--listFormula"), + LIST_REGION(_(""), ExportAction.class.getName() + "#listRegion", "--listRegion"), + LIST_SIMULATION(_(""), ExportAction.class.getName() + "#listSimulation", "--listSimulation"), + + EXPORT_ANALYSE_PLAN(_(""), ExportAction.class.getName() + "#exportAnalysePlan", "--exportAnalysePlan"), + EXPORT_EXPORT(_(""), ExportAction.class.getName() + "#exportExport", "--exportExport"), + EXPORT_RULE(_(""), ExportAction.class.getName() + "#exportRule", "--exportRule"), + EXPORT_SCRIPT(_(""), ExportAction.class.getName() + "#exportScript", "--exportScript"), + EXPORT_SIMULATOR(_(""), ExportAction.class.getName() + "#exportSimulator", "--exportSimulator"), + EXPORT_FORMULA(_(""), ExportAction.class.getName() + "#exportFormula", "--exportFormula"), + EXPORT_REGION(_(""), ExportAction.class.getName() + "#exportRegion", "--exportRegion"), + EXPORT_SIMULATION(_(""), ExportAction.class.getName() + "#exportSimulation", "--exportSimulation"), + + VCS_SSH_CREATE_KEY(_(""), VCSAction.class.getName() + "#sshCreateKey", "--sshCreateKey"), + VCS_UPDATE(_(""), VCSAction.class.getName() + "#vcsUpdate", "--vcsUpdate"), + VCS_ADD(_(""), VCSAction.class.getName() + "#vcsAdd", "--vcsAdd"), + VCS_REMOVE(_(""), VCSAction.class.getName() + "#vcsRemove", "--vcsRemove"), + VCS_COMMIT(_(""), VCSAction.class.getName() + "#vcsCommit", "--vcsCommit"), + + SIMULATE_WITH_REGION(_(""), SimulationAction.class.getName() + "#simulateWithRegion", "--simulateWithRegion"), + SIMULATE_WITH_SIMULATION(_(""), SimulationAction.class.getName() + "#simulateWithSimulation", "--simulateWithSimulation"), + SIMULATE_WITH_SIMULATION_AND_SCRIPT(_(""), SimulationAction.class.getName() + "#simulateWithSimulationAndScript", "--simulateWithSimulationAndScript"), + SIMULATE_REMOTELLY(_(""), SimulationAction.class.getName() + "#simulateRemotelly", "--simulateRemotelly"), + SIMULATE_REMOTELLY_WITH_PRESCRIPT(_(""), SimulationAction.class.getName() + "#simulateRemotellyWithPreScript", "--simulateRemotellyWithPreScript"); + + public String description; + public String action; + public String[] aliases; + + private Action(String description, String action, String ... aliases) { + this.description = description; + this.action = action; + this.aliases = aliases; + } + } +} Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,636 +0,0 @@ -/* *##% - * Copyright (C) 2006 - 2009 - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ - -package fr.ifremer.isisfish.entities; - -import static org.codelutin.i18n.I18n._; -import static org.codelutin.i18n.I18n.n_; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.math.matrix.MatrixException; -import org.codelutin.math.matrix.MatrixFactory; -import org.codelutin.math.matrix.MatrixIterator; -import org.codelutin.math.matrix.MatrixND; -import org.codelutin.topia.TopiaException; - -import fr.ifremer.isisfish.IsisFishDAOHelper; -import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.equation.Language; -import fr.ifremer.isisfish.equation.PopulationGrowth; -import fr.ifremer.isisfish.equation.PopulationGrowthReverse; -import fr.ifremer.isisfish.equation.PopulationMeanWeight; -import fr.ifremer.isisfish.equation.PopulationNaturalDeathRate; -import fr.ifremer.isisfish.equation.PopulationPrice; -import fr.ifremer.isisfish.equation.PopulationReproductionEquation; -import fr.ifremer.isisfish.types.Month; - -/** - * PopulationImpl. - * - * Created: 11 janv. 2006 20:16:27 - * - * @author poussin - * @version $Revision$ - * - * Last update: $Date$ - * by : $Author$ - */ -public class PopulationImpl extends PopulationAbstract { - - /** Logger for this class. */ - private static final Log log = LogFactory.getLog(PopulationImpl.class); - - /** serialVersionUID */ - private static final long serialVersionUID = 1L; - - /** - * Overwrite delete. - * @throws TopiaException - */ - @Override - public void delete() throws TopiaException { - // chatellier 20090317 fix hibernate exception - // object will be resaved ... - // FIXME should be fixed on topia maybe ? - this.getSpecies().getPopulation().remove(this); - - super.delete(); - } - - /* - * @see fr.ifremer.isisfish.entities.PopulationAbstract#toString() - */ - @Override - public String toString() { - return getName(); - } - - /** - * override to change name of equation - * @see fr.ifremer.isisfish.entities.PopulationAbstract#setName(java.lang.String) - */ - @Override - public void setName(String value) { - super.setName(value); - updateEquationName(); - } - - private void updateEquationName() { - Equation eq = null; - eq = getGrowth(); - if (eq != null) { - eq.setName(getName()); - } - eq = getGrowthReverse(); - if (eq != null) { - eq.setName(getName()); - } - eq = getMeanWeight(); - if (eq != null) { - eq.setName(getName()); - } - eq = getNaturalDeathRate(); - if (eq != null) { - eq.setName(getName()); - } - eq = getPrice(); - if (eq != null) { - eq.setName(getName()); - } - eq = getReproductionEquation(); - if (eq != null) { - eq.setName(getName()); - } - } - - public void setEquationReproductionEquation(String content) { - try { - Equation eq = getReproductionEquation(); - - if (eq == null) { - EquationDAO dao = IsisFishDAOHelper - .getEquationDAO(getTopiaContext()); - // create equation - eq = dao.create(); - eq.setCategory("Reproduction"); - eq.setJavaInterface(PopulationReproductionEquation.class); - eq.setLanguage(Language.JAVA); - setReproductionEquation(eq); - } - - eq.setName(getName()); - - // Fire - String _oldValue = eq.getContent(); - fireOnPreWrite("content", _oldValue, content); - - eq.setContent(content); - eq.update(); - - fireOnPostWrite("content", _oldValue, content); - - } catch (TopiaException eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); - } - } - - public void setEquationGrowth(String content) { - try { - Equation eq = getGrowth(); - - if (eq == null) { - EquationDAO dao = IsisFishDAOHelper - .getEquationDAO(getTopiaContext()); - // create Growth equation - eq = dao.create(); - eq.setCategory("Growth"); - eq.setJavaInterface(PopulationGrowth.class); - eq.setLanguage(Language.JAVA); - setGrowth(eq); - } - - eq.setName(getName()); - - // Fire - String _oldValue = eq.getContent(); - fireOnPreWrite("content", _oldValue, content); - - eq.setContent(content); - eq.update(); - - fireOnPostWrite("content", _oldValue, content); - - } catch (TopiaException eee) { - throw new IsisFishRuntimeException(_("isisfish.change.equation"), - eee); - } - } - - public void setEquationGrowthReverse(String content) { - try { - Equation eq = getGrowthReverse(); - - if (eq == null) { - EquationDAO dao = IsisFishDAOHelper - .getEquationDAO(getTopiaContext()); - // create equation - eq = dao.create(); - eq.setCategory("GrowthReverse"); - eq.setJavaInterface(PopulationGrowthReverse.class); - eq.setLanguage(Language.JAVA); - setGrowthReverse(eq); - } - - eq.setName(getName()); - - // Fire - String _oldValue = eq.getContent(); - fireOnPreWrite("content", _oldValue, content); - - eq.setContent(content); - eq.update(); - - fireOnPostWrite("content", _oldValue, content); - - } catch (TopiaException eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); - } - } - - public void setEquationNaturalDeathRate(String content) { - try { - Equation eq = getNaturalDeathRate(); - - if (eq == null) { - EquationDAO dao = IsisFishDAOHelper - .getEquationDAO(getTopiaContext()); - // create equation - eq = dao.create(); - eq.setCategory("NaturalDeathRate"); - eq.setJavaInterface(PopulationNaturalDeathRate.class); - eq.setLanguage(Language.JAVA); - setNaturalDeathRate(eq); - } - - eq.setName(getName()); - - // Fire - String _oldValue = eq.getContent(); - fireOnPreWrite("content", _oldValue, content); - - eq.setContent(content); - eq.update(); - - fireOnPostWrite("content", _oldValue, content); - - } catch (TopiaException eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); - } - } - - public void setEquationMeanWeight(String content) { - try { - Equation eq = getMeanWeight(); - - if (eq == null) { - EquationDAO dao = IsisFishDAOHelper - .getEquationDAO(getTopiaContext()); - // create equation - eq = dao.create(); - eq.setCategory("MeanWeight"); - eq.setJavaInterface(PopulationMeanWeight.class); - eq.setLanguage(Language.JAVA); - setMeanWeight(eq); - } - - eq.setName(getName()); - - // Fire - String _oldValue = eq.getContent(); - fireOnPreWrite("content", _oldValue, content); - - eq.setContent(content); - eq.update(); - - fireOnPostWrite("content", _oldValue, content); - - } catch (TopiaException eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); - } - } - - public void setEquationPrice(String content) { - try { - Equation eq = getPrice(); - - if (eq == null) { - EquationDAO dao = IsisFishDAOHelper - .getEquationDAO(getTopiaContext()); - // create equation - eq = dao.create(); - eq.setCategory("Price"); - eq.setJavaInterface(PopulationPrice.class); - eq.setLanguage(Language.JAVA); - setPrice(eq); - } - - eq.setName(getName()); - - // Fire - String _oldValue = eq.getContent(); - fireOnPreWrite("content", _oldValue, content); - - eq.setContent(content); - eq.update(); - - fireOnPostWrite("content", _oldValue, content); - - } catch (TopiaException eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.change.equation"), eee); - } - } - - /* - * @see fr.ifremer.isisfish.entities.Population#getNaturalDeathBirth() - */ - @Override - public double getNaturalDeathBirth(Zone zone) { - double result = 0; - try { - Equation eq = getNaturalDeathRate(); - result = eq.evaluate("pop", this, "group", null, "zone", zone); - } catch (Exception eee) { - if (log.isWarnEnabled()) { - log.warn("Error in natural death rate equation"); - } - if (log.isDebugEnabled()) { - log.debug("StackTrace", eee); - } - } - return result; - } - - /** - * Return Matrix [groups x zones] of Natural death rate. - * - * @return a matrix - */ - @Override - public MatrixND getNaturalDeathRateMatrix() { - List<PopulationGroup> groups = getPopulationGroup(); - List<Zone> zones = getPopulationZone(); - - MatrixND result = MatrixFactory.getInstance().create( - "Natural death rate", new List[] { groups, zones }, - new String[] { "Groups", "Zones" }); - - for (MatrixIterator i = result.iterator(); i.hasNext();) { - i.next(); - PopulationGroup group = (PopulationGroup) i - .getSemanticsCoordinates()[0]; - Zone zone = (Zone) i.getSemanticsCoordinates()[1]; - - double value = group.getNaturalDeathRate(zone); - i.setValue(value); - } - - return result; - } - - @Override - public PopulationSeasonInfo getPopulationSeasonInfo(Month month) { - Collection<PopulationSeasonInfo> all = getPopulationSeasonInfo(); - PopulationSeasonInfo result = null; - for (PopulationSeasonInfo psi : all) { - if (psi.containsMonth(month)) { - result = psi; - break; - } - } - return result; - } - - /** - * Compute age of group with length - * @param length length of group - * @param group group - * @return age in month - */ - @Override - public double getAge(double length, PopulationGroup group) { - double result = 0; - try { - Equation growth = getGrowthReverse(); - result = growth.evaluate("length", length, "group", group); - } catch (Exception eee) { - if (log.isWarnEnabled()) { - log.warn("Error in get age"); - } - if (log.isDebugEnabled()) { - log.debug("StackTrace", eee); - } - } - return result; - } - - /** - * Compute length of group with age. - * - * @param age age of group in month - * @param group group - * @return length of group - */ - @Override - public double getLength(double age, PopulationGroup group) { - double result = 0; - try { - Equation growth = getGrowth(); - result = growth.evaluate("age", age, "group", group); - } catch (Exception eee) { - if (log.isWarnEnabled()) { - log.warn("Error in get length"); - } - if (log.isDebugEnabled()) { - log.debug("StackTrace", eee); - } - } - return result; - } - - // /* (non-Javadoc) - // * @see fr.ifremer.isisfish.entities.PopulationAbstract#addPopulationSeasonInfo(fr.ifremer.isisfish.entities.PopulationSeasonInfo) - // */ - // @Override - // public void addPopulationSeasonInfo(PopulationSeasonInfo populationSeasonInfo) { - // super.addPopulationSeasonInfo(populationSeasonInfo); - // changeCapturability(); - // } - // - // /* (non-Javadoc) - // * @see fr.ifremer.isisfish.entities.PopulationAbstract#addPopulationGroup(fr.ifremer.isisfish.entities.PopulationGroup) - // */ - // @Override - // public void addPopulationGroup(PopulationGroup populationGroup) { - // super.addPopulationGroup(populationGroup); - // changeCapturability(); - // } - - // protected void changeCapturability() { - // MatrixND mat = null; - // if (sizePopulationGroup() == 0 || sizePopulationSeasonInfo() == 0) { - // log.warn("Population doesn't have population group or population season info"); - // } else { - // List [] sems = new List[]{ - // getPopulationGroup(), - // getPopulationSeasonInfo(), - // }; - // mat = MatrixFactory.getInstance().create(_("isisfish.population.capturability"), sems, - // new String[]{_("isisfish.population.group"), _("isisfish.population.season")}); - // - // - // MatrixND oldMat = getCapturability(); - // if (oldMat != null) { - // mat.pasteSemantics(oldMat); - // } - // } - // setCapturability(mat); - // } - - @Override - public void setCapturability(MatrixND value) { - List[] sems = value.getSemantics(); - - boolean allNull = true; - for (List l : sems) { - for (Object o : l) { - allNull = (o == null); - } - } - - // toutes les semantiques de la matrice sont null - // on cree une nouvelle matrice avec les bonnes dimensions et les - // bonnes semantiques avec les valeurs de la matrice passee en parametre - if (allNull) { - List[] newsems = new List[]{getPopulationGroup(), - getPopulationSeasonInfo(),}; - - MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.population.capturability"), - newsems, - new String[] { n_("isisfish.population.group"), - n_("isisfish.population.season") }); - newmat.paste(value); - value = newmat; - } - super.setCapturability(value); - } - - /* - * @see fr.ifremer.isisfish.entities.PopulationAbstract#getCapturability() - */ - @Override - public MatrixND getCapturability() { - MatrixND mat = super.getCapturability(); - // check the validity - if (sizePopulationGroup() == 0 || sizePopulationSeasonInfo() == 0) { - log.warn("Population doesn't have population group or population season info"); - return null; - } - List[] sems = new List[] { getPopulationGroup(), - getPopulationSeasonInfo(), }; - if (mat == null) { - log.debug("Capturability is null, create new matrix"); - mat = MatrixFactory.getInstance().create( - n_("isisfish.population.capturability"), - sems, - new String[] { n_("isisfish.population.group"), - n_("isisfish.population.season") }); - // we don't call setCapturability because is better to create a valid - // matrix when capturability is null instead check validity and - // create new one and paste the old - } else if (!Arrays.equals(mat.getSemantics(), sems)) { - log.debug("Capturability has changed, create new matrix and copy old: " - + mat.getSemantics() + " " + sems); - MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.population.capturability"), - sems, - new String[] { n_("isisfish.population.group"), - n_("isisfish.population.season") }); - - boolean allNull = true; - for (List l : mat.getSemantics()) { - for (Object o : l) { - allNull = (o == null); - } - } - - // les dimensions de la matrice en base sont toutes null, on - // fait en simple copy de matrice sans utiliser la semantique - if (allNull) { - newmat.paste(mat); - } else { - newmat.pasteSemantics(mat); - } - mat = newmat; - // perhaps call setCapturability, but if possible wait the user - // call setCapturability explicitly with this new matrix - } - return mat; - } - - /* - * @see fr.ifremer.isisfish.entities.PopulationAbstract#getMappingZoneReproZoneRecru() - */ - @Override - public MatrixND getMappingZoneReproZoneRecru() { - if (sizeReproductionZone() == 0 || sizeRecruitmentZone() == 0) { - log.warn("Population doesn't have zone reproduction or zone recruitment"); - return null; - } - MatrixND mat = super.getMappingZoneReproZoneRecru(); - List[] sems = new List[] { getReproductionZone(), getRecruitmentZone(), }; - if (mat == null) { - mat = MatrixFactory.getInstance().create( - n_("isisfish.population.mappingZoneReproZoneRecru"), - sems, - new String[] { n_("isisfish.population.reproduction"), - n_("isisfish.population.recruitment") }); - // we don't call setMappingZoneReproZoneRecru because is better to create a valid - // matrix when MappingZoneReproZoneRecru is null instead check validity and - // create new one and paste the old - } else if (!Arrays.equals(mat.getSemantics(), sems)) { - MatrixND newmat = MatrixFactory.getInstance().create( - n_("isisfish.population.mappingZoneReproZoneRecru"), - sems, - new String[] { n_("isisfish.population.reproduction"), - n_("isisfish.population.recruitment") }); - newmat.paste(mat); - mat = newmat; - } - return mat; - } - - /** - * Convertie une matrice N 2D en une matrice N 1D strucutre pour les calculer. - * - * N2D[classes, zones] --> N1D[classe1(zone1, zone2, ...), classe2(zone1, zone2, ...)] - * - * @see #split2D(MatrixND) - */ - public MatrixND N2DToN1D(MatrixND N) { - int maxX = N.getDim(0); - int maxY = N.getDim(1); - - MatrixND result = MatrixFactory.getInstance().create( - n_("isisfish.population.matrixAbundance1D"), - new int[] { 1, maxX * maxY }); - - for (int x = 0; x < maxX; x++) { - for (int y = 0; y < maxY; y++) { - result.setValue(0, x * maxY + y, N.getValue(x, y)); - } - } - return result; - } - - /** - * A partir d'une matrice N structure selon l'ecriture matricielle - * en classe puis en zone, construit une matrice 2D en Classe(X) - * et en Zone(Y) - * - * @see #N2DToN1D(MatrixND) - */ - public MatrixND split2D(MatrixND N) { - List<Zone> zones = getPopulationZone(); - List<PopulationGroup> groups = getPopulationGroup(); - int nbZone = zones.size(); - - MatrixND result = MatrixFactory.getInstance().create( - n_("isisfish.population.matrixAbundance"), - new List[] { groups, zones }, - new String[] { n_("isisfish.population.groups"), - n_("isisfish.population.zones") }); - - try { - int c = 0; - int z = 0; - for (MatrixIterator mi = N.iterator(); mi.next();) { - result.setValue(c, z, mi.getValue()); - if (z + 1 == nbZone) { - c++; - } - z = (z + 1) % nbZone; - } - } catch (MatrixException eee) { - log.warn("MatrixException", eee); - } - return result; - } - -} Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java (from rev 2479, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/entities/PopulationImpl.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,636 @@ +/* *##% + * Copyright (C) 2006 - 2009 + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.entities; + +import static org.codelutin.i18n.I18n._; +import static org.codelutin.i18n.I18n.n_; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.math.matrix.MatrixException; +import org.codelutin.math.matrix.MatrixFactory; +import org.codelutin.math.matrix.MatrixIterator; +import org.codelutin.math.matrix.MatrixND; +import org.codelutin.topia.TopiaException; + +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.equation.Language; +import fr.ifremer.isisfish.equation.PopulationGrowth; +import fr.ifremer.isisfish.equation.PopulationGrowthReverse; +import fr.ifremer.isisfish.equation.PopulationMeanWeight; +import fr.ifremer.isisfish.equation.PopulationNaturalDeathRate; +import fr.ifremer.isisfish.equation.PopulationPrice; +import fr.ifremer.isisfish.equation.PopulationReproductionEquation; +import fr.ifremer.isisfish.types.Month; + +/** + * PopulationImpl. + * + * Created: 11 janv. 2006 20:16:27 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class PopulationImpl extends PopulationAbstract { + + /** Logger for this class. */ + private static final Log log = LogFactory.getLog(PopulationImpl.class); + + /** serialVersionUID */ + private static final long serialVersionUID = 1L; + + /** + * Overwrite delete. + * @throws TopiaException + */ + @Override + public void delete() throws TopiaException { + // chatellier 20090317 fix hibernate exception + // object will be resaved ... + // FIXME should be fixed on topia maybe ? + this.getSpecies().getPopulation().remove(this); + + super.delete(); + } + + /* + * @see fr.ifremer.isisfish.entities.PopulationAbstract#toString() + */ + @Override + public String toString() { + return getName(); + } + + /** + * override to change name of equation + * @see fr.ifremer.isisfish.entities.PopulationAbstract#setName(java.lang.String) + */ + @Override + public void setName(String value) { + super.setName(value); + updateEquationName(); + } + + private void updateEquationName() { + Equation eq = null; + eq = getGrowth(); + if (eq != null) { + eq.setName(getName()); + } + eq = getGrowthReverse(); + if (eq != null) { + eq.setName(getName()); + } + eq = getMeanWeight(); + if (eq != null) { + eq.setName(getName()); + } + eq = getNaturalDeathRate(); + if (eq != null) { + eq.setName(getName()); + } + eq = getPrice(); + if (eq != null) { + eq.setName(getName()); + } + eq = getReproductionEquation(); + if (eq != null) { + eq.setName(getName()); + } + } + + public void setEquationReproductionEquation(String content) { + try { + Equation eq = getReproductionEquation(); + + if (eq == null) { + EquationDAO dao = IsisFishDAOHelper + .getEquationDAO(getTopiaContext()); + // create equation + eq = dao.create(); + eq.setCategory("Reproduction"); + eq.setJavaInterface(PopulationReproductionEquation.class); + eq.setLanguage(Language.JAVA); + setReproductionEquation(eq); + } + + eq.setName(getName()); + + // Fire + String _oldValue = eq.getContent(); + fireOnPreWrite("content", _oldValue, content); + + eq.setContent(content); + eq.update(); + + fireOnPostWrite("content", _oldValue, content); + + } catch (TopiaException eee) { + throw new IsisFishRuntimeException( + _("isisfish.error.change.equation"), eee); + } + } + + public void setEquationGrowth(String content) { + try { + Equation eq = getGrowth(); + + if (eq == null) { + EquationDAO dao = IsisFishDAOHelper + .getEquationDAO(getTopiaContext()); + // create Growth equation + eq = dao.create(); + eq.setCategory("Growth"); + eq.setJavaInterface(PopulationGrowth.class); + eq.setLanguage(Language.JAVA); + setGrowth(eq); + } + + eq.setName(getName()); + + // Fire + String _oldValue = eq.getContent(); + fireOnPreWrite("content", _oldValue, content); + + eq.setContent(content); + eq.update(); + + fireOnPostWrite("content", _oldValue, content); + + } catch (TopiaException eee) { + throw new IsisFishRuntimeException(_("isisfish.change.equation"), + eee); + } + } + + public void setEquationGrowthReverse(String content) { + try { + Equation eq = getGrowthReverse(); + + if (eq == null) { + EquationDAO dao = IsisFishDAOHelper + .getEquationDAO(getTopiaContext()); + // create equation + eq = dao.create(); + eq.setCategory("GrowthReverse"); + eq.setJavaInterface(PopulationGrowthReverse.class); + eq.setLanguage(Language.JAVA); + setGrowthReverse(eq); + } + + eq.setName(getName()); + + // Fire + String _oldValue = eq.getContent(); + fireOnPreWrite("content", _oldValue, content); + + eq.setContent(content); + eq.update(); + + fireOnPostWrite("content", _oldValue, content); + + } catch (TopiaException eee) { + throw new IsisFishRuntimeException( + _("isisfish.error.change.equation"), eee); + } + } + + public void setEquationNaturalDeathRate(String content) { + try { + Equation eq = getNaturalDeathRate(); + + if (eq == null) { + EquationDAO dao = IsisFishDAOHelper + .getEquationDAO(getTopiaContext()); + // create equation + eq = dao.create(); + eq.setCategory("NaturalDeathRate"); + eq.setJavaInterface(PopulationNaturalDeathRate.class); + eq.setLanguage(Language.JAVA); + setNaturalDeathRate(eq); + } + + eq.setName(getName()); + + // Fire + String _oldValue = eq.getContent(); + fireOnPreWrite("content", _oldValue, content); + + eq.setContent(content); + eq.update(); + + fireOnPostWrite("content", _oldValue, content); + + } catch (TopiaException eee) { + throw new IsisFishRuntimeException( + _("isisfish.error.change.equation"), eee); + } + } + + public void setEquationMeanWeight(String content) { + try { + Equation eq = getMeanWeight(); + + if (eq == null) { + EquationDAO dao = IsisFishDAOHelper + .getEquationDAO(getTopiaContext()); + // create equation + eq = dao.create(); + eq.setCategory("MeanWeight"); + eq.setJavaInterface(PopulationMeanWeight.class); + eq.setLanguage(Language.JAVA); + setMeanWeight(eq); + } + + eq.setName(getName()); + + // Fire + String _oldValue = eq.getContent(); + fireOnPreWrite("content", _oldValue, content); + + eq.setContent(content); + eq.update(); + + fireOnPostWrite("content", _oldValue, content); + + } catch (TopiaException eee) { + throw new IsisFishRuntimeException( + _("isisfish.error.change.equation"), eee); + } + } + + public void setEquationPrice(String content) { + try { + Equation eq = getPrice(); + + if (eq == null) { + EquationDAO dao = IsisFishDAOHelper + .getEquationDAO(getTopiaContext()); + // create equation + eq = dao.create(); + eq.setCategory("Price"); + eq.setJavaInterface(PopulationPrice.class); + eq.setLanguage(Language.JAVA); + setPrice(eq); + } + + eq.setName(getName()); + + // Fire + String _oldValue = eq.getContent(); + fireOnPreWrite("content", _oldValue, content); + + eq.setContent(content); + eq.update(); + + fireOnPostWrite("content", _oldValue, content); + + } catch (TopiaException eee) { + throw new IsisFishRuntimeException( + _("isisfish.error.change.equation"), eee); + } + } + + /* + * @see fr.ifremer.isisfish.entities.Population#getNaturalDeathBirth() + */ + @Override + public double getNaturalDeathBirth(Zone zone) { + double result = 0; + try { + Equation eq = getNaturalDeathRate(); + result = eq.evaluate("pop", this, "group", null, "zone", zone); + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Error in natural death rate equation"); + } + if (log.isDebugEnabled()) { + log.debug("StackTrace", eee); + } + } + return result; + } + + /** + * Return Matrix [groups x zones] of Natural death rate. + * + * @return a matrix + */ + @Override + public MatrixND getNaturalDeathRateMatrix() { + List<PopulationGroup> groups = getPopulationGroup(); + List<Zone> zones = getPopulationZone(); + + MatrixND result = MatrixFactory.getInstance().create( + "Natural death rate", new List[] { groups, zones }, + new String[] { "Groups", "Zones" }); + + for (MatrixIterator i = result.iterator(); i.hasNext();) { + i.next(); + PopulationGroup group = (PopulationGroup) i + .getSemanticsCoordinates()[0]; + Zone zone = (Zone) i.getSemanticsCoordinates()[1]; + + double value = group.getNaturalDeathRate(zone); + i.setValue(value); + } + + return result; + } + + @Override + public PopulationSeasonInfo getPopulationSeasonInfo(Month month) { + Collection<PopulationSeasonInfo> all = getPopulationSeasonInfo(); + PopulationSeasonInfo result = null; + for (PopulationSeasonInfo psi : all) { + if (psi.containsMonth(month)) { + result = psi; + break; + } + } + return result; + } + + /** + * Compute age of group with length + * @param length length of group + * @param group group + * @return age in month + */ + @Override + public double getAge(double length, PopulationGroup group) { + double result = 0; + try { + Equation growth = getGrowthReverse(); + result = growth.evaluate("length", length, "group", group); + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Error in get age"); + } + if (log.isDebugEnabled()) { + log.debug("StackTrace", eee); + } + } + return result; + } + + /** + * Compute length of group with age. + * + * @param age age of group in month + * @param group group + * @return length of group + */ + @Override + public double getLength(double age, PopulationGroup group) { + double result = 0; + try { + Equation growth = getGrowth(); + result = growth.evaluate("age", age, "group", group); + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Error in get length"); + } + if (log.isDebugEnabled()) { + log.debug("StackTrace", eee); + } + } + return result; + } + + // /* (non-Javadoc) + // * @see fr.ifremer.isisfish.entities.PopulationAbstract#addPopulationSeasonInfo(fr.ifremer.isisfish.entities.PopulationSeasonInfo) + // */ + // @Override + // public void addPopulationSeasonInfo(PopulationSeasonInfo populationSeasonInfo) { + // super.addPopulationSeasonInfo(populationSeasonInfo); + // changeCapturability(); + // } + // + // /* (non-Javadoc) + // * @see fr.ifremer.isisfish.entities.PopulationAbstract#addPopulationGroup(fr.ifremer.isisfish.entities.PopulationGroup) + // */ + // @Override + // public void addPopulationGroup(PopulationGroup populationGroup) { + // super.addPopulationGroup(populationGroup); + // changeCapturability(); + // } + + // protected void changeCapturability() { + // MatrixND mat = null; + // if (sizePopulationGroup() == 0 || sizePopulationSeasonInfo() == 0) { + // log.warn("Population doesn't have population group or population season info"); + // } else { + // List [] sems = new List[]{ + // getPopulationGroup(), + // getPopulationSeasonInfo(), + // }; + // mat = MatrixFactory.getInstance().create(_("isisfish.population.capturability"), sems, + // new String[]{_("isisfish.population.group"), _("isisfish.population.season")}); + // + // + // MatrixND oldMat = getCapturability(); + // if (oldMat != null) { + // mat.pasteSemantics(oldMat); + // } + // } + // setCapturability(mat); + // } + + @Override + public void setCapturability(MatrixND value) { + List[] sems = value.getSemantics(); + + boolean allNull = true; + for (List l : sems) { + for (Object o : l) { + allNull = (o == null); + } + } + + // toutes les semantiques de la matrice sont null + // on cree une nouvelle matrice avec les bonnes dimensions et les + // bonnes semantiques avec les valeurs de la matrice passee en parametre + if (allNull) { + List[] newsems = new List[]{getPopulationGroup(), + getPopulationSeasonInfo(),}; + + MatrixND newmat = MatrixFactory.getInstance().create( + n_("isisfish.population.capturability"), + newsems, + new String[] { n_("isisfish.population.group"), + n_("isisfish.population.season") }); + newmat.paste(value); + value = newmat; + } + super.setCapturability(value); + } + + /* + * @see fr.ifremer.isisfish.entities.PopulationAbstract#getCapturability() + */ + @Override + public MatrixND getCapturability() { + MatrixND mat = super.getCapturability(); + // check the validity + if (sizePopulationGroup() == 0 || sizePopulationSeasonInfo() == 0) { + log.warn("Population doesn't have population group or population season info"); + return null; + } + List[] sems = new List[] { getPopulationGroup(), + getPopulationSeasonInfo(), }; + if (mat == null) { + log.debug("Capturability is null, create new matrix"); + mat = MatrixFactory.getInstance().create( + _("isisfish.population.capturability"), + sems, + new String[] { _("isisfish.population.group"), + _("isisfish.population.season") }); + // we don't call setCapturability because is better to create a valid + // matrix when capturability is null instead check validity and + // create new one and paste the old + } else if (!Arrays.equals(mat.getSemantics(), sems)) { + log.debug("Capturability has changed, create new matrix and copy old: " + + mat.getSemantics() + " " + sems); + MatrixND newmat = MatrixFactory.getInstance().create( + _("isisfish.population.capturability"), + sems, + new String[] { _("isisfish.population.group"), + _("isisfish.population.season") }); + + boolean allNull = true; + for (List l : mat.getSemantics()) { + for (Object o : l) { + allNull = (o == null); + } + } + + // les dimensions de la matrice en base sont toutes null, on + // fait en simple copy de matrice sans utiliser la semantique + if (allNull) { + newmat.paste(mat); + } else { + newmat.pasteSemantics(mat); + } + mat = newmat; + // perhaps call setCapturability, but if possible wait the user + // call setCapturability explicitly with this new matrix + } + return mat; + } + + /* + * @see fr.ifremer.isisfish.entities.PopulationAbstract#getMappingZoneReproZoneRecru() + */ + @Override + public MatrixND getMappingZoneReproZoneRecru() { + if (sizeReproductionZone() == 0 || sizeRecruitmentZone() == 0) { + log.warn("Population doesn't have zone reproduction or zone recruitment"); + return null; + } + MatrixND mat = super.getMappingZoneReproZoneRecru(); + List[] sems = new List[] { getReproductionZone(), getRecruitmentZone(), }; + if (mat == null) { + mat = MatrixFactory.getInstance().create( + n_("isisfish.population.mappingZoneReproZoneRecru"), + sems, + new String[] { _("isisfish.population.reproduction"), + _("isisfish.population.recruitment") }); + // we don't call setMappingZoneReproZoneRecru because is better to create a valid + // matrix when MappingZoneReproZoneRecru is null instead check validity and + // create new one and paste the old + } else if (!Arrays.equals(mat.getSemantics(), sems)) { + MatrixND newmat = MatrixFactory.getInstance().create( + _("isisfish.population.mappingZoneReproZoneRecru"), + sems, + new String[] { _("isisfish.population.reproduction"), + _("isisfish.population.recruitment") }); + newmat.paste(mat); + mat = newmat; + } + return mat; + } + + /** + * Convertie une matrice N 2D en une matrice N 1D strucutre pour les calculer. + * + * N2D[classes, zones] --> N1D[classe1(zone1, zone2, ...), classe2(zone1, zone2, ...)] + * + * @see #split2D(MatrixND) + */ + public MatrixND N2DToN1D(MatrixND N) { + int maxX = N.getDim(0); + int maxY = N.getDim(1); + + MatrixND result = MatrixFactory.getInstance().create( + _("isisfish.population.matrixAbundance1D"), + new int[] { 1, maxX * maxY }); + + for (int x = 0; x < maxX; x++) { + for (int y = 0; y < maxY; y++) { + result.setValue(0, x * maxY + y, N.getValue(x, y)); + } + } + return result; + } + + /** + * A partir d'une matrice N structure selon l'ecriture matricielle + * en classe puis en zone, construit une matrice 2D en Classe(X) + * et en Zone(Y) + * + * @see #N2DToN1D(MatrixND) + */ + public MatrixND split2D(MatrixND N) { + List<Zone> zones = getPopulationZone(); + List<PopulationGroup> groups = getPopulationGroup(); + int nbZone = zones.size(); + + MatrixND result = MatrixFactory.getInstance().create( + _("isisfish.population.matrixAbundance"), + new List[] { groups, zones }, + new String[] { _("isisfish.population.groups"), + _("isisfish.population.zones") }); + + try { + int c = 0; + int z = 0; + for (MatrixIterator mi = N.iterator(); mi.next();) { + result.setValue(c, z, mi.getValue()); + if (z + 1 == nbZone) { + c++; + } + z = (z + 1) % nbZone; + } + } catch (MatrixException eee) { + log.warn("MatrixException", eee); + } + return result; + } + +} Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,789 +0,0 @@ -/* *##% - * Copyright (C) 2009 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 published by the Free Software Foundation; either version 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ - -package fr.ifremer.isisfish.simulator.launcher; - -import static org.codelutin.i18n.I18n._; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.rmi.RemoteException; -import java.util.Collection; -import java.util.Comparator; -import java.util.Date; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.SortedSet; -import java.util.Timer; -import java.util.TreeSet; -import java.util.AbstractMap.SimpleEntry; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.topia.TopiaException; -import org.codelutin.util.FileUtil; - -import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishException; -import fr.ifremer.isisfish.datastore.AnalysePlanStorage; -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.simulator.AnalysePlan; -import fr.ifremer.isisfish.simulator.SimulationControl; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.launcher.SimulationJob.PostAction; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; - -/** - * Moniteur singleton pour pouvoir sauvegarder - * localement la liste des simulations démarrées et - * permettre de continuer le monitoring au relancemenent - * d'Isis. - * - * Cette classe n'implemente pas {@link SimulationServiceListener} - * car elle ne doit pas écouter toutes les simulations, mais - * seulement celle dit simple, c'est-à-dire "master plan" du plan - * d'analyse. - * - * @since 3.2.0.4 - * @author chatellier - * @version $Revision$ - * - * Last update : $Date$ - * By : $Author$ - */ -public class SimulationMonitor extends Thread { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - private static Log log = LogFactory.getLog(SimulationMonitor.class); - - /** Instance. */ - protected static SimulationMonitor instance = new SimulationMonitor(); - - /** - * Simulation information saving file. - * - * Saved in $HOME/.isis-simulations-3 - */ - protected File monitorFile; - - /** - * Separator used in monitor file. - * - * Can't be "," - */ - protected static final String MONITORFILESEPARATOR = "/"; - - /** - * Liste des simulations en cours, - * Le format est défini ainsi : - * id=launcher/datedelancement/onlyexport/exports/plandependant/plans - */ - protected Properties properties = new Properties(); - - /** - * Map to remember when a simulation have to be checked. - * - * Sorted on date ASC. - */ - protected SortedSet<SimpleEntry<Date, SimulationJob>> checkSet; - - /** - * Check scheduler. - */ - protected Timer checkScheduler; - - /** - * Constructeur. - */ - protected SimulationMonitor() { - // FIXME configure this path - String monitorSaveFile = System.getProperty("user.home") - + File.separator + ".isis-simulations-3"; - monitorFile = new File(monitorSaveFile); - - // init monitor check map - checkSet = new TreeSet<SimpleEntry<Date, SimulationJob>>(new Comparator<SimpleEntry<Date, SimulationJob>>(){ - @Override - public int compare(SimpleEntry<Date, SimulationJob> o1, - SimpleEntry<Date, SimulationJob> o2) { - return o1.getKey().compareTo(o2.getKey()); - } - - }); - - // init timer - checkScheduler = new Timer(); - } - - /** - * Instance getter. - * - * @return instance - */ - public static SimulationMonitor getInstance() { - return instance; - } - - /** - * Reload config and read non simulation job - * into simulation service. - * - * @param service SimulationService - */ - public void reloadConfig(final SimulationService service) { - - if (monitorFile.canRead()) { - try { - properties.load(new FileInputStream(monitorFile)); - - // in a thead - // don't temporize UI loading - new Thread() { - public void run() { - restartSimulationProgression(service); - } - }.start(); - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't reload monitor file", e); - } - } - } - - } - - /** - * Take all simulation in loaded file. - * And add it into simulation service. - */ - protected void restartSimulationProgression(SimulationService service) { - - for (Map.Entry<Object, Object> entry : properties.entrySet()) { - String simulationId = (String) entry.getKey(); - String simulationInfo = (String) entry.getValue(); - - // 0 = launcher - // 1 = date - // 2 = export - // 3 = plan dependent - String[] simulationInfos = simulationInfo.split(MONITORFILESEPARATOR); - String simulationLauncher = simulationInfos[0]; - String simulationDate = simulationInfos[1]; - String simulationOnlyExport = simulationInfos[2]; - String simulationExports = simulationInfos[3]; - String simulationUseAnalysePlan = simulationInfos[4]; - String simulationPlans = ""; - if(simulationInfos.length >= 6) { - simulationPlans = simulationInfos[5]; - } - - if (log.isInfoEnabled()) { - log.info("Restart monitoring of " + simulationId); - if (log.isDebugEnabled()) { - log.debug(" launcher= " + simulationLauncher + ", date = " - + simulationDate); - } - } - - // FIXME date remove simulation that are older than a week ? - - // re add simulation in - try { - // launcher - SimulatorLauncher launcher = (SimulatorLauncher) Class.forName( - simulationLauncher).newInstance(); - - SimulationParameter params = new SimulationParameter(); - // UseAnalysePlan - params.setUseAnalysePlan("true".equalsIgnoreCase(simulationUseAnalysePlan)); - // plans - String[] planList = simulationPlans.split(","); - for (String name : planList) { - if (name != null && !name.isEmpty()) { - try { - AnalysePlan plan = AnalysePlanStorage.getAnalysePlan(name).getNewAnalysePlanInstance(); - params.getAnalysePlans().add(plan); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find plan: " + name, eee); - } - } - } - } - // OnlyExport - params.setOnlyExport("true".equalsIgnoreCase(simulationOnlyExport)); - // exports - String[] exportList = simulationExports.split(","); - for (String name : exportList) { - if (name != null && !name.isEmpty()) { - params.getExportNames().add(name); - } - } - - // FIXME needed - params.setExportDirectory(IsisFish.config.getDefaultExportDirectory().toString()); - - service.submitForCheckOnly(simulationId, params, launcher, 0); - } catch (ClassNotFoundException e) { - if (log.isErrorEnabled()) { - log.error("Can't found launcher for this simulation", e); - } - } catch (InstantiationException e) { - if (log.isErrorEnabled()) { - log.error("Can't get launcher for this simulation", e); - } - } catch (IllegalAccessException e) { - if (log.isErrorEnabled()) { - log.error("Can't get launcher for this simulation", e); - } - } - } - } - - public synchronized void simulationStart(SimulationJob job) { - - String monitorKey = job.getId(); - SimulatorLauncher launcher = job.getLauncher(); - SimulationParameter params = job.getItem().getParameter(); - - // 0 = launcher - String monitorValue = launcher.getClass().getName(); - // 1 = date - monitorValue += MONITORFILESEPARATOR + System.currentTimeMillis(); - // 2 = onlyexport - monitorValue += MONITORFILESEPARATOR + params.getOnlyExport(); - // 3 = exports - monitorValue += MONITORFILESEPARATOR + collectionToString(params.getExportNames()); - // 4 = plan dependent - monitorValue += MONITORFILESEPARATOR + params.getUseAnalysePlan(); - // 5 = plan dependent - String planList = ""; - for (AnalysePlan plan : params.getAnalysePlans()) { - planList += AnalysePlanStorage.getName(plan) + ","; - } - monitorValue += MONITORFILESEPARATOR + planList; - - properties.put(monitorKey, monitorValue); - try { - properties.store(new FileOutputStream(monitorFile), - "Simulation added at " + new Date()); - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't save monitor file", e); - } - } - - if (log.isInfoEnabled()) { - log.info("Saving simulation " + monitorKey + " as started"); - } - - // put interval in launcher ? - Date checkDate = new Date(); - // do check at start - //long intervalInSeconds = launcher.getCheckProgressionInterval(); - //checkDate.setTime(checkDate.getTime() + intervalInSeconds); - - // add simulation to check queue - checkSet.add(new SimpleEntry<Date, SimulationJob>(checkDate, job)); - - // start thread if not already started - if (!this.isAlive()) { - this.start(); - } - } - - /** - * Mark a simulation as stopped. - * Remove it from save file. - * - * @param job job that control the simulation - */ - public synchronized void simulationStop(SimulationJob job) { - String monitorKey = job.getId(); - - properties.remove(monitorKey); - try { - if (properties.isEmpty()) { - monitorFile.delete(); - } else { - properties.store(new FileOutputStream(monitorFile), - "Simulation delete at " + new Date()); - } - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't save monitor file", e); - } - } - - if (log.isInfoEnabled()) { - log.info("Saving simulation " + monitorKey + " as stopped"); - } - } - - /* - * @see java.util.TimerTask#run() - */ - @Override - public void run() { - - // main loop to monitor "all" running simulation - - while (true) { - - // quoi qu'il arrive, le thread ne doit jamais s'arreter - try { - waitAndCheckProgression(); - } - catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("An exception occurs durring monitoring", e); - } - } - } - } - - /** - * Wait one second, and check for first - * simulation progression, if first simulation time - * is reached. - */ - protected void waitAndCheckProgression() { - - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - if (log.isErrorEnabled()) { - log.error("Monitor thread has been interrupted", e); - } - } - - // log - if (log.isDebugEnabled()) { - log.debug("Simulation monitor wake up"); - } - - // take first job in map - if (!checkSet.isEmpty()) { - SimpleEntry<Date, SimulationJob> firstEntry = checkSet.first(); - Date date = firstEntry.getKey(); - Date now = new Date(); - - if (date.before(now)) { - // first key date in map is over... - // check is needed - SimulationJob job = firstEntry.getValue(); - SimulatorLauncher launcher = job.getLauncher(); - - if (log.isInfoEnabled()) { - log.info("Check simulation progression : " + job.getId()); - } - - // retourne true if : - // - simulation is finished - // - simulation end has been asked - boolean jobIsFinished = checkProgression(job, launcher); - - // always remove this simulation from map - checkSet.remove(firstEntry); - - // if not finished, re-add it at end - if (jobIsFinished) { - - if (log.isInfoEnabled()) { - log.info("Job " + job.getId() + " finished"); - } - - doPostSimulationOperation(job, launcher); - } - - // Si le job est reelement fini - // et que les post operation ont réussie - else { - // next check date - long nextJobTimeMs = date.getTime() - + launcher.getCheckProgressionInterval() * 1000; - Date nextJobDate = new Date(nextJobTimeMs); - checkSet.add(new SimpleEntry<Date, SimulationJob>(nextJobDate, job)); - } - - } else { - //checkScheduler.schedule(this, date); - if (log.isDebugEnabled()) { - log.debug("Time to check not reached, skip check, " - + date + " < " + now); - } - } - } - } - - /** - * Check progression. - * - * @param job job to check progression - * @param launcher SimulatorLauncher that manage simulation - * @return <tt>true</tt> is simulation is finished, <tt>false<tt> otherwise - */ - protected boolean checkProgression(SimulationJob job, - SimulatorLauncher launcher) { - - boolean simulationEnded = false; - - SimulationService service = SimulationService.getService(); - SimulationControl control = job.getItem().getControl(); - - // log - if (log.isDebugEnabled()) { - log.debug("Checking simulation progression : " + control.getId()); - log.debug(" with launcher = " + launcher); - } - - // update - try { - launcher.updateControl(service, control); - - // by default, Progress = ProgressMax = 0 - // WARNING this condition is VERY important - // and set by end of - // fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher#localSimulateSameThread(SimulationControl, SimulationStorage) - - // FIXME check SimulationStorage.exists(control.getId()) condition - if ((control.getProgress() > 0 - && control.getProgress() >= control.getProgressMax() && SimulationStorage.exists(control.getId()))) { - simulationEnded = true; - } - - if (control.isStopSimulationRequest()) { - launcher.simulationStopRequest(job); // to release one resource - simulationEnded = true; - } - } catch (RemoteException e) { - if (log.isErrorEnabled()) { - log.error("Progression thread update error", e); - } - } - - return simulationEnded; - } - - /** - * Operation to do after simulation end. - * - * - get simulation result - * - do result export - * - * @param job job - * @param launcher {@link SimulatorLauncher} that manage simulation - * - * @return true if post operation complete and job has be removed from queue - */ - protected boolean doPostSimulationOperation(SimulationJob job, - SimulatorLauncher launcher) { - - boolean result = false; - - SimulationService service = SimulationService.getService(); - SimulationControl control = job.getItem().getControl(); - - // Release one available resource on launcher - // FIXME done by launcher himself - //launcher.simulationEnded(); - - if (log.isInfoEnabled()) { - log.info("Do post simulation operation for " + control.getId()); - } - - try { - - // get storage - // meme si StopSimulationRequest - // force le download dans le cas de ssh - SimulationStorage simulation = launcher.getSimulationStorage( - service, control); - - // on ne fait de post traitement que si - // la simulation n'a pas été arretée - if (!control.isStopSimulationRequest()) { - // post manage this storage - boolean simulationAvailble = exportResult(job, simulation); - - // sensitivity calculator analyze result call - // can't do analyze second pass if simulation - // has been deleted - if (simulationAvailble) { - analyzeSensitivityResult(job, simulation); - } - } - - // notify simulation ended - // to not check later... - // don't do in finally, getSimulationStorage may fail (md5 on ssh) - simulationStop(job); - service.fireStopEvent(job); - - result = true; - - } catch (RemoteException e) { - if (log.isErrorEnabled()) { - log.error("Can't get simulation results after simulation end", - e); - } - } - - return result; - } - - /** - * Export result, and delete simulation if "onlyExport" has - * been selected. - * - * @return <tt>true</tt> if simulation is still available (not delete by onlyExport) - */ - protected boolean exportResult(SimulationJob job, SimulationStorage simulation) { - - boolean simulationAvailble = true; - - SimulationParameter param = job.getItem().getParameter(); - SimulationControl control = job.getItem().getControl(); - String id = control.getId(); - - try { - // copie les exports de simulation dans le repertoire - // souhaiter par l'utilisateur - if (param.getExportNames() != null - && param.getExportNames().size() > 0) { - - // log - if (log.isDebugEnabled()) { - log.debug("Export results"); - } - - File exportDir = SimulationStorage - .getResultExportDirectory(simulation.getDirectory()); - // FIXME verifier que pour les plans on a bien tous les - // export, c-a-d que les export son fait dans un sous rep - // portant le nom de la simu - FileUtil.copyAndRenameRecursively(exportDir, new File(param - .getExportDirectory()), exportDir.getName(), id); - } else { - // log - if (log.isDebugEnabled()) { - log.debug("Not Export results : unneeded"); - } - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("Can't export simulation %s", id), eee); - } - } - - try { - // Si l'utilisateur souhaite seulement les exports - // on supprimer la/les simulations. - if (param.getOnlyExport()) { - // pour les plan dependant il faut le faire apres toutes - // les simulations donc pas ici - if (job.getParentJob() == null || param.getUseAnalysePlan() - && param.isIndependentPlan()) { - - // log - if (log.isDebugEnabled()) { - log.debug("Export \"onlyExport\" : deleting simulation"); - } - - simulation.delete(false); - simulationAvailble = false; - } else { - // log - if (log.isDebugEnabled()) { - log.debug("OnlyExport options true, but plan dependant : not delete simulation"); - } - } - } else { - // log - if (log.isDebugEnabled()) { - log.debug("OnlyExport options not set : not delete simulation"); - } - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("Can't delete simulation %s ", id), eee); - } - } - - for (PostAction action : job.getPostActions()) { - try { - action.finished(job, simulation); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("Can't do post action %s", action), eee); - } - } - } - - return simulationAvailble; - } - - /** - * For each finished simulation, check that all sensitivity - * simulation are available (in case of sensitivity simulation only). - * - * @param job job - * @param simulation simulation - */ - protected void analyzeSensitivityResult(SimulationJob job, - SimulationStorage simulation) { - - Properties props = simulation.getPropertiesParameter(); - - int numberOfSimulation = Integer.parseInt(props.getProperty(SimulationParameter.NUMBER_OF_SENSITIVITY_SIMULATION)); //getNumberOfSensitivitySimulation(); - - if (numberOfSimulation > 0) { - // this is a sensitivity simulation - String simulationId = job.getId(); - String simulationCommonPrefix = simulationId.substring(0, simulationId.lastIndexOf("_")); - int numberFinished = getNumberOfFinishedSimulation(simulationCommonPrefix, numberOfSimulation); - - // si on a toutes les simulation est qu'elles sont finie - // on construit la liste des simulation storage - // et on l'envoie au script d'analyse de sensibilite - if (numberFinished == numberOfSimulation) { - - // FIXME buggy because of hack in getParameter() - // getRegion() from simulation can be locked - SimulationParameter params = simulation.getParameter(); - SensitivityCalculator sensitivityCalculator = params.getSensitivityCalculator(); - if (sensitivityCalculator != null) { - if (log.isDebugEnabled()) { - log.debug("Call analyzeResult on sensitivity script " + sensitivityCalculator.getClass().getSimpleName()); - } - try { - // get full storage list - List<SimulationStorage> simulationStorageForAnalyze = - getStorageListForSecondPass(simulationCommonPrefix, numberOfSimulation); - // build master sensitivity export directory - File masterExportDirectory = new File(IsisFish.config.getDefaultExportDirectory(), simulationCommonPrefix); - // directory must already exists !!! - sensitivityCalculator.analyzeResult(simulationStorageForAnalyze, masterExportDirectory); - } - catch(SensitivityException e) { - if (log.isErrorEnabled()) { - log.error("Can't call analyse result", e); - } - } - } - } - } - } - - /** - * Parcourt le dossier de toutes les simulation commencant par le prefix donné, - * et retourne le nombre de simulation terminées. - * - * @param asPrefixName simulation name (without number suffix) - * @param numberOfSimulation total simulation number - * - * @return le nombre de simulation réellement terminée - */ - protected int getNumberOfFinishedSimulation(String asPrefixName, int numberOfSimulation) { - - int numberOfFinishedSimulation = 0; - - // en sens inverse, il le fera carrement moins souvent - for (int simulationIndex = numberOfSimulation - 1; simulationIndex >= 0 ; --simulationIndex) { - String currentId = asPrefixName + "_" + simulationIndex; - if (SimulationStorage.localyExists(currentId)) { - SimulationControl currentSimulationControl = new SimulationControl(currentId); - SimulationStorage.readControl(currentId, currentSimulationControl); - - // condition for simulation "end" - if (currentSimulationControl.getProgress() > 0 - && currentSimulationControl.getProgress() >= currentSimulationControl.getProgressMax()) { - - // new finished simulation found - numberOfFinishedSimulation++; - } - else { - if (log.isDebugEnabled()) { - log.debug("Miss simulation number = " + simulationIndex); - } - - // no need to continue - // if only miss one, break - break; - } - } - else { - break; - } - } - - return numberOfFinishedSimulation; - } - - /** - * Parcourt les dossiers et instancie les storages une fois - * qu'on est sur qu'on a toutes les simulations. - * - * @param asPrefixName simulation name (without number suffix) - * @param numberOfSimulation total simulation number - * - * @return la liste des storages - */ - protected List<SimulationStorage> getStorageListForSecondPass(String asPrefixName, int numberOfSimulation) { - - // simulation start at 0 - List<SimulationStorage> simulationStorageForAnalyze = new LinkedList<SimulationStorage>(); - // en sens inverse, il le fera carrement moins souvent - for (int simulationIndex = 0; simulationIndex < numberOfSimulation; ++simulationIndex) { - String currentId = asPrefixName + "_" + simulationIndex; - SimulationStorage storage = SimulationStorage.getSimulation(currentId); - // always add first (loop in reverse order) - // result list is keeped sorted - simulationStorageForAnalyze.add(storage); - } - - return simulationStorageForAnalyze; - } - - /** - * Convertit une collection de string, en une chaine - * séparée par des ",". - * - * @param collection collection to convert - * @return string - */ - protected static String collectionToString(Collection<String> collection) { - String str = ""; - - Iterator<String> it = collection.iterator(); - while(it.hasNext()) { - str += it.next(); - if(it.hasNext()) { - str += ","; - } - } - - return str; - } -} Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java (from rev 2497, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationMonitor.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,788 @@ +/* *##% + * Copyright (C) 2009 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 published by the Free Software Foundation; either version 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.simulator.launcher; + +import static org.codelutin.i18n.I18n._; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.rmi.RemoteException; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.SortedSet; +import java.util.Timer; +import java.util.TreeSet; +import java.util.AbstractMap.SimpleEntry; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.util.FileUtil; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.IsisFishException; +import fr.ifremer.isisfish.datastore.AnalysePlanStorage; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.simulator.AnalysePlan; +import fr.ifremer.isisfish.simulator.SimulationControl; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.launcher.SimulationJob.PostAction; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; + +/** + * Moniteur singleton pour pouvoir sauvegarder + * localement la liste des simulations démarrées et + * permettre de continuer le monitoring au relancemenent + * d'Isis. + * + * Cette classe n'implemente pas {@link SimulationServiceListener} + * car elle ne doit pas écouter toutes les simulations, mais + * seulement celle dit simple, c'est-à-dire "master plan" du plan + * d'analyse. + * + * @since 3.2.0.4 + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class SimulationMonitor extends Thread { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(SimulationMonitor.class); + + /** Instance. */ + protected static SimulationMonitor instance = new SimulationMonitor(); + + /** + * Simulation information saving file. + * + * Saved in $HOME/.isis-simulations-3 + */ + protected File monitorFile; + + /** + * Separator used in monitor file. + * + * Can't be "," + */ + protected static final String MONITORFILESEPARATOR = "/"; + + /** + * Liste des simulations en cours, + * Le format est défini ainsi : + * id=launcher/datedelancement/onlyexport/exports/plandependant/plans + */ + protected Properties properties = new Properties(); + + /** + * Map to remember when a simulation have to be checked. + * + * Sorted on date ASC. + */ + protected SortedSet<SimpleEntry<Date, SimulationJob>> checkSet; + + /** + * Check scheduler. + */ + protected Timer checkScheduler; + + /** + * Constructeur. + */ + protected SimulationMonitor() { + // FIXME configure this path + String monitorSaveFile = System.getProperty("user.home") + + File.separator + ".isis-simulations-3"; + monitorFile = new File(monitorSaveFile); + + // init monitor check map + checkSet = new TreeSet<SimpleEntry<Date, SimulationJob>>(new Comparator<SimpleEntry<Date, SimulationJob>>(){ + @Override + public int compare(SimpleEntry<Date, SimulationJob> o1, + SimpleEntry<Date, SimulationJob> o2) { + return o1.getKey().compareTo(o2.getKey()); + } + + }); + + // init timer + checkScheduler = new Timer(); + } + + /** + * Instance getter. + * + * @return instance + */ + public static SimulationMonitor getInstance() { + return instance; + } + + /** + * Reload config and read non simulation job + * into simulation service. + * + * @param service SimulationService + */ + public void reloadConfig(final SimulationService service) { + + if (monitorFile.canRead()) { + try { + properties.load(new FileInputStream(monitorFile)); + + // in a thead + // don't temporize UI loading + new Thread() { + public void run() { + restartSimulationProgression(service); + } + }.start(); + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't reload monitor file", e); + } + } + } + + } + + /** + * Take all simulation in loaded file. + * And add it into simulation service. + */ + protected void restartSimulationProgression(SimulationService service) { + + for (Map.Entry<Object, Object> entry : properties.entrySet()) { + String simulationId = (String) entry.getKey(); + String simulationInfo = (String) entry.getValue(); + + // 0 = launcher + // 1 = date + // 2 = export + // 3 = plan dependent + String[] simulationInfos = simulationInfo.split(MONITORFILESEPARATOR); + String simulationLauncher = simulationInfos[0]; + String simulationDate = simulationInfos[1]; + String simulationOnlyExport = simulationInfos[2]; + String simulationExports = simulationInfos[3]; + String simulationUseAnalysePlan = simulationInfos[4]; + String simulationPlans = ""; + if(simulationInfos.length >= 6) { + simulationPlans = simulationInfos[5]; + } + + if (log.isInfoEnabled()) { + log.info("Restart monitoring of " + simulationId); + if (log.isDebugEnabled()) { + log.debug(" launcher= " + simulationLauncher + ", date = " + + simulationDate); + } + } + + // FIXME date remove simulation that are older than a week ? + + // re add simulation in + try { + // launcher + SimulatorLauncher launcher = (SimulatorLauncher) Class.forName( + simulationLauncher).newInstance(); + + SimulationParameter params = new SimulationParameter(); + // UseAnalysePlan + params.setUseAnalysePlan("true".equalsIgnoreCase(simulationUseAnalysePlan)); + // plans + String[] planList = simulationPlans.split(","); + for (String name : planList) { + if (name != null && !name.isEmpty()) { + try { + AnalysePlan plan = AnalysePlanStorage.getAnalysePlan(name).getNewAnalysePlanInstance(); + params.getAnalysePlans().add(plan); + } catch (IsisFishException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't find plan: " + name, eee); + } + } + } + } + // OnlyExport + params.setOnlyExport("true".equalsIgnoreCase(simulationOnlyExport)); + // exports + String[] exportList = simulationExports.split(","); + for (String name : exportList) { + if (name != null && !name.isEmpty()) { + params.getExportNames().add(name); + } + } + + // FIXME needed + params.setExportDirectory(IsisFish.config.getDefaultExportDirectory().toString()); + + service.submitForCheckOnly(simulationId, params, launcher, 0); + } catch (ClassNotFoundException e) { + if (log.isErrorEnabled()) { + log.error("Can't found launcher for this simulation", e); + } + } catch (InstantiationException e) { + if (log.isErrorEnabled()) { + log.error("Can't get launcher for this simulation", e); + } + } catch (IllegalAccessException e) { + if (log.isErrorEnabled()) { + log.error("Can't get launcher for this simulation", e); + } + } + } + } + + public synchronized void simulationStart(SimulationJob job) { + + String monitorKey = job.getId(); + SimulatorLauncher launcher = job.getLauncher(); + SimulationParameter params = job.getItem().getParameter(); + + // 0 = launcher + String monitorValue = launcher.getClass().getName(); + // 1 = date + monitorValue += MONITORFILESEPARATOR + System.currentTimeMillis(); + // 2 = onlyexport + monitorValue += MONITORFILESEPARATOR + params.getOnlyExport(); + // 3 = exports + monitorValue += MONITORFILESEPARATOR + collectionToString(params.getExportNames()); + // 4 = plan dependent + monitorValue += MONITORFILESEPARATOR + params.getUseAnalysePlan(); + // 5 = plan dependent + String planList = ""; + for (AnalysePlan plan : params.getAnalysePlans()) { + planList += AnalysePlanStorage.getName(plan) + ","; + } + monitorValue += MONITORFILESEPARATOR + planList; + + properties.put(monitorKey, monitorValue); + try { + properties.store(new FileOutputStream(monitorFile), + "Simulation added at " + new Date()); + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't save monitor file", e); + } + } + + if (log.isInfoEnabled()) { + log.info("Saving simulation " + monitorKey + " as started"); + } + + // put interval in launcher ? + Date checkDate = new Date(); + // do check at start + //long intervalInSeconds = launcher.getCheckProgressionInterval(); + //checkDate.setTime(checkDate.getTime() + intervalInSeconds); + + // add simulation to check queue + checkSet.add(new SimpleEntry<Date, SimulationJob>(checkDate, job)); + + // start thread if not already started + if (!this.isAlive()) { + this.start(); + } + } + + /** + * Mark a simulation as stopped. + * Remove it from save file. + * + * @param job job that control the simulation + */ + public synchronized void simulationStop(SimulationJob job) { + String monitorKey = job.getId(); + + properties.remove(monitorKey); + try { + if (properties.isEmpty()) { + monitorFile.delete(); + } else { + properties.store(new FileOutputStream(monitorFile), + "Simulation delete at " + new Date()); + } + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't save monitor file", e); + } + } + + if (log.isInfoEnabled()) { + log.info("Saving simulation " + monitorKey + " as stopped"); + } + } + + /* + * @see java.util.TimerTask#run() + */ + @Override + public void run() { + + // main loop to monitor "all" running simulation + + while (true) { + + // quoi qu'il arrive, le thread ne doit jamais s'arreter + try { + waitAndCheckProgression(); + } + catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("An exception occurs durring monitoring", e); + } + } + } + } + + /** + * Wait one second, and check for first + * simulation progression, if first simulation time + * is reached. + */ + protected void waitAndCheckProgression() { + + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + if (log.isErrorEnabled()) { + log.error("Monitor thread has been interrupted", e); + } + } + + // log + if (log.isDebugEnabled()) { + log.debug("Simulation monitor wake up"); + } + + // take first job in map + if (!checkSet.isEmpty()) { + SimpleEntry<Date, SimulationJob> firstEntry = checkSet.first(); + Date date = firstEntry.getKey(); + Date now = new Date(); + + if (date.before(now)) { + // first key date in map is over... + // check is needed + SimulationJob job = firstEntry.getValue(); + SimulatorLauncher launcher = job.getLauncher(); + + if (log.isDebugEnabled()) { + log.debug("Check simulation progression : " + job.getId()); + } + + // retourne true if : + // - simulation is finished + // - simulation end has been asked + boolean jobIsFinished = checkProgression(job, launcher); + + // always remove this simulation from map + checkSet.remove(firstEntry); + + // if not finished, re-add it at end + if (jobIsFinished) { + + if (log.isInfoEnabled()) { + log.info("Job " + job.getId() + " finished"); + } + + doPostSimulationOperation(job, launcher); + } + + // Si le job est reelement fini + // et que les post operation ont réussie + else { + // next check date + long nextJobTimeMs = date.getTime() + + launcher.getCheckProgressionInterval() * 1000; + Date nextJobDate = new Date(nextJobTimeMs); + checkSet.add(new SimpleEntry<Date, SimulationJob>(nextJobDate, job)); + } + + } else { + //checkScheduler.schedule(this, date); + if (log.isDebugEnabled()) { + log.debug("Time to check not reached, skip check, " + + date + " < " + now); + } + } + } + } + + /** + * Check progression. + * + * @param job job to check progression + * @param launcher SimulatorLauncher that manage simulation + * @return <tt>true</tt> is simulation is finished, <tt>false<tt> otherwise + */ + protected boolean checkProgression(SimulationJob job, + SimulatorLauncher launcher) { + + boolean simulationEnded = false; + + SimulationService service = SimulationService.getService(); + SimulationControl control = job.getItem().getControl(); + + // log + if (log.isDebugEnabled()) { + log.debug("Checking simulation progression : " + control.getId()); + log.debug(" with launcher = " + launcher); + } + + // update + try { + launcher.updateControl(service, control); + + // by default, Progress = ProgressMax = 0 + // WARNING this condition is VERY important + // and set by end of + // fr.ifremer.isisfish.simulator.launcher.InProcessSimulatorLauncher#localSimulateSameThread(SimulationControl, SimulationStorage) + + // FIXME check SimulationStorage.exists(control.getId()) condition + if ((control.getProgress() > 0 + && control.getProgress() >= control.getProgressMax() && SimulationStorage.exists(control.getId()))) { + simulationEnded = true; + } + + if (control.isStopSimulationRequest()) { + launcher.simulationStopRequest(job); // to release one resource + simulationEnded = true; + } + } catch (RemoteException e) { + if (log.isErrorEnabled()) { + log.error("Progression thread update error", e); + } + } + + return simulationEnded; + } + + /** + * Operation to do after simulation end. + * + * - get simulation result + * - do result export + * + * @param job job + * @param launcher {@link SimulatorLauncher} that manage simulation + * + * @return true if post operation complete and job has be removed from queue + */ + protected boolean doPostSimulationOperation(SimulationJob job, + SimulatorLauncher launcher) { + + boolean result = false; + + SimulationService service = SimulationService.getService(); + SimulationControl control = job.getItem().getControl(); + + // Release one available resource on launcher + // FIXME done by launcher himself + //launcher.simulationEnded(); + + if (log.isInfoEnabled()) { + log.info("Do post simulation operation for " + control.getId()); + } + + try { + + // get storage + // meme si StopSimulationRequest + // force le download dans le cas de ssh + SimulationStorage simulation = launcher.getSimulationStorage( + service, control); + + // on ne fait de post traitement que si + // la simulation n'a pas été arretée + if (!control.isStopSimulationRequest()) { + // post manage this storage + boolean simulationAvailble = exportResult(job, simulation); + + // sensitivity calculator analyze result call + // can't do analyze second pass if simulation + // has been deleted + if (simulationAvailble) { + analyzeSensitivityResult(job, simulation); + } + } + + // notify simulation ended + // to not check later... + // don't do in finally, getSimulationStorage may fail (md5 on ssh) + simulationStop(job); + service.fireStopEvent(job); + + result = true; + + } catch (RemoteException e) { + if (log.isErrorEnabled()) { + log.error("Can't get simulation results after simulation end", + e); + } + } + + return result; + } + + /** + * Export result, and delete simulation if "onlyExport" has + * been selected. + * + * @return <tt>true</tt> if simulation is still available (not delete by onlyExport) + */ + protected boolean exportResult(SimulationJob job, SimulationStorage simulation) { + + boolean simulationAvailble = true; + + SimulationParameter param = job.getItem().getParameter(); + SimulationControl control = job.getItem().getControl(); + String id = control.getId(); + + try { + // copie les exports de simulation dans le repertoire + // souhaiter par l'utilisateur + if (param.getExportNames() != null + && param.getExportNames().size() > 0) { + + // log + if (log.isDebugEnabled()) { + log.debug("Export results"); + } + + File exportDir = SimulationStorage + .getResultExportDirectory(simulation.getDirectory()); + // FIXME verifier que pour les plans on a bien tous les + // export, c-a-d que les export son fait dans un sous rep + // portant le nom de la simu + FileUtil.copyAndRenameRecursively(exportDir, new File(param + .getExportDirectory()), exportDir.getName(), id); + } else { + // log + if (log.isDebugEnabled()) { + log.debug("Not Export results : unneeded"); + } + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(_("Can't export simulation %s", id), eee); + } + } + + try { + // Si l'utilisateur souhaite seulement les exports + // on supprimer la/les simulations. + if (param.getOnlyExport()) { + // pour les plan dependant il faut le faire apres toutes + // les simulations donc pas ici + if (job.getParentJob() == null || param.getUseAnalysePlan() + && param.isIndependentPlan()) { + + // log + if (log.isDebugEnabled()) { + log.debug("Export \"onlyExport\" : deleting simulation"); + } + + simulation.delete(false); + simulationAvailble = false; + } else { + // log + if (log.isDebugEnabled()) { + log.debug("OnlyExport options true, but plan dependant : not delete simulation"); + } + } + } else { + // log + if (log.isDebugEnabled()) { + log.debug("OnlyExport options not set : not delete simulation"); + } + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(_("Can't delete simulation %s ", id), eee); + } + } + + for (PostAction action : job.getPostActions()) { + try { + action.finished(job, simulation); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(_("Can't do post action %s", action), eee); + } + } + } + + return simulationAvailble; + } + + /** + * For each finished simulation, check that all sensitivity + * simulation are available (in case of sensitivity simulation only). + * + * @param job job + * @param simulation simulation + */ + protected void analyzeSensitivityResult(SimulationJob job, + SimulationStorage simulation) { + + Properties props = simulation.getPropertiesParameter(); + + int numberOfSimulation = Integer.parseInt(props.getProperty(SimulationParameter.NUMBER_OF_SENSITIVITY_SIMULATION)); //getNumberOfSensitivitySimulation(); + + if (numberOfSimulation > 0) { + // this is a sensitivity simulation + String simulationId = job.getId(); + String simulationCommonPrefix = simulationId.substring(0, simulationId.lastIndexOf("_")); + int numberFinished = getNumberOfFinishedSimulation(simulationCommonPrefix, numberOfSimulation); + + // si on a toutes les simulation est qu'elles sont finie + // on construit la liste des simulation storage + // et on l'envoie au script d'analyse de sensibilite + if (numberFinished == numberOfSimulation) { + + // FIXME buggy because of hack in getParameter() + // getRegion() from simulation can be locked + SimulationParameter params = simulation.getParameter(); + SensitivityCalculator sensitivityCalculator = params.getSensitivityCalculator(); + if (sensitivityCalculator != null) { + if (log.isDebugEnabled()) { + log.debug("Call analyzeResult on sensitivity script " + sensitivityCalculator.getClass().getSimpleName()); + } + try { + // get full storage list + List<SimulationStorage> simulationStorageForAnalyze = + getStorageListForSecondPass(simulationCommonPrefix, numberOfSimulation); + // build master sensitivity export directory + File masterExportDirectory = new File(IsisFish.config.getDefaultExportDirectory(), simulationCommonPrefix); + // directory must already exists !!! + sensitivityCalculator.analyzeResult(simulationStorageForAnalyze, masterExportDirectory); + } + catch(SensitivityException e) { + if (log.isErrorEnabled()) { + log.error("Can't call analyse result", e); + } + } + } + } + } + } + + /** + * Parcourt le dossier de toutes les simulation commencant par le prefix donné, + * et retourne le nombre de simulation terminées. + * + * @param asPrefixName simulation name (without number suffix) + * @param numberOfSimulation total simulation number + * + * @return le nombre de simulation réellement terminée + */ + protected int getNumberOfFinishedSimulation(String asPrefixName, int numberOfSimulation) { + + int numberOfFinishedSimulation = 0; + + // en sens inverse, il le fera carrement moins souvent + for (int simulationIndex = numberOfSimulation - 1; simulationIndex >= 0 ; --simulationIndex) { + String currentId = asPrefixName + "_" + simulationIndex; + if (SimulationStorage.localyExists(currentId)) { + SimulationControl currentSimulationControl = new SimulationControl(currentId); + SimulationStorage.readControl(currentId, currentSimulationControl); + + // condition for simulation "end" + if (currentSimulationControl.getProgress() > 0 + && currentSimulationControl.getProgress() >= currentSimulationControl.getProgressMax()) { + + // new finished simulation found + numberOfFinishedSimulation++; + } + else { + if (log.isDebugEnabled()) { + log.debug("Miss simulation number = " + simulationIndex); + } + + // no need to continue + // if only miss one, break + break; + } + } + else { + break; + } + } + + return numberOfFinishedSimulation; + } + + /** + * Parcourt les dossiers et instancie les storages une fois + * qu'on est sur qu'on a toutes les simulations. + * + * @param asPrefixName simulation name (without number suffix) + * @param numberOfSimulation total simulation number + * + * @return la liste des storages + */ + protected List<SimulationStorage> getStorageListForSecondPass(String asPrefixName, int numberOfSimulation) { + + // simulation start at 0 + List<SimulationStorage> simulationStorageForAnalyze = new LinkedList<SimulationStorage>(); + // en sens inverse, il le fera carrement moins souvent + for (int simulationIndex = 0; simulationIndex < numberOfSimulation; ++simulationIndex) { + String currentId = asPrefixName + "_" + simulationIndex; + SimulationStorage storage = SimulationStorage.getSimulation(currentId); + // always add first (loop in reverse order) + // result list is keeped sorted + simulationStorageForAnalyze.add(storage); + } + + return simulationStorageForAnalyze; + } + + /** + * Convertit une collection de string, en une chaine + * séparée par des ",". + * + * @param collection collection to convert + * @return string + */ + protected static String collectionToString(Collection<String> collection) { + String str = ""; + + Iterator<String> it = collection.iterator(); + while(it.hasNext()) { + str += it.next(); + if(it.hasNext()) { + str += ","; + } + } + + return str; + } +} Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,1085 +0,0 @@ -/* *##% - * Copyright (C) 2002-2009 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - *##%*/ - -package fr.ifremer.isisfish.simulator.launcher; - -import static org.codelutin.i18n.I18n._; - -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.mutable.MutableInt; -import org.apache.commons.lang.time.DurationFormatUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.topia.TopiaContext; -import org.codelutin.topia.TopiaException; -import org.codelutin.util.FileUtil; -import org.codelutin.util.ListenerSet; -import org.codelutin.util.ObjectUtil; -import org.codelutin.util.ZipUtil; - -import fr.ifremer.isisfish.IsisFish; -import fr.ifremer.isisfish.IsisFishRuntimeException; -import fr.ifremer.isisfish.datastore.AnalysePlanStorage; -import fr.ifremer.isisfish.datastore.ExportStorage; -import fr.ifremer.isisfish.datastore.RegionStorage; -import fr.ifremer.isisfish.datastore.RuleStorage; -import fr.ifremer.isisfish.datastore.ScriptStorage; -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.datastore.SimulatorStorage; -import fr.ifremer.isisfish.mexico.MexicoHelper; -import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.simulator.AnalysePlan; -import fr.ifremer.isisfish.simulator.AnalysePlanContext; -import fr.ifremer.isisfish.simulator.SimulationControl; -import fr.ifremer.isisfish.simulator.SimulationException; -import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; -import fr.ifremer.isisfish.simulator.sensitivity.Scenario; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator; -import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; -import fr.ifremer.isisfish.util.ClasspathTemplateLoader; -import fr.ifremer.isisfish.util.CompileHelper; -import fr.ifremer.isisfish.util.ConverterUtil; -import freemarker.cache.TemplateLoader; -import freemarker.ext.beans.BeansWrapper; -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateException; - -/** - * Cette classe est responsable de conservation de toutes les simulations faites - * ou a faire. Pour ajouter une nouvelle simulation on appelle la methode - * {@link #submit}. - * <p> - * Cette classe sert aussi de modele pour le moniteur de queue - * <p> - * Il existe une instance unique pour toute l'application - * <p> - * Lors de l'instanciation de la classe, l'ensemble des - * {@link SimulatorLauncher} disponible est recherche dans la configuration - * et un executor est cree pour chaque. - * <p> - * Si un {@link SimulatorLauncher} genere trop d'erreur (RemoteException) - * Il est alors suspendu pour ne plus etre utilise pour les simulations. - * - * @author poussin - * @version $Revision: 1.0 $ - * - * Last update : $Date: 5 mars 2009 $ - * By : $Author: chatellier $ - */ -public class SimulationService { - - public static final String SIMULATION_LAUNCHER = "simulation.launcher"; - /** nombre maximal de simulation autoriser pour un plan */ - // FIXME a rendre configurable MAX_PLAN_SIMULATION - public static final int MAX_PLAN_SIMULATION = 20000; - - /** to use log facility, just put in your code: log.info(\"...\"); */ - private static Log log = LogFactory.getLog(SimulationService.class); - - protected static SimulationService instance = new SimulationService(); - - /** Freemarker configuration used to get prescripts content. */ - protected Configuration freemarkerConfiguration; - - /** Freemarker pre script template. */ - protected static final String SENSITIVITY_PRE_SCRIPT = "templates/prescript/factorprescript.ftl"; - - /** - * Retourne l'instance du {@link SimulationService} a utiliser - * @return l'instance a utiliser - */ - public static SimulationService getService() { - return instance; - } - - protected PropertyChangeSupport propertyListeners = new PropertyChangeSupport( - this); - protected ListenerSet<SimulationServiceListener> listeners = new ListenerSet<SimulationServiceListener>(); - - // FIXME pouvoir configurer ceci en fichier de config - // FIXME ainsi que la mise a false, lors de la simulation de la derniere - // (sans doute ajoute un boolean, simulationListAsQueue = true|false) - protected boolean autoLaunch = true; - - /** L'executor utilise pour creer toutes les sous simulations des plans - * independants */ - protected ExecutorService subSimulationComputationExecutor = Executors - .newSingleThreadExecutor(); - /** Tous les types de {@link SimulatorLauncher} disponibles, et leur - * executors associe */ - protected Map<SimulatorLauncher, SimulationExecutor> executors = new LinkedHashMap<SimulatorLauncher, SimulationExecutor>(); - /** Le nombre d'erreur pour les SimulatorLauncher */ - protected Map<SimulatorLauncher, MutableInt> launcherError = new HashMap<SimulatorLauncher, MutableInt>(); - /** La queue contenant toutes les simulations a faire */ - protected SimulationQueue queue = new SimulationQueue(); - - /** Contient les identifiants des simulations presentes dans {@link #jobs}*/ - protected Set<String> idJobs = new HashSet<String>(); - /** La liste des jobs existant (queue + job demarre) */ - protected Set<SimulationJob> jobs = new TreeSet<SimulationJob>(); - - /** La liste des jobs termines */ - protected Set<SimulationJob> jobDones = new TreeSet<SimulationJob>(); - - /** - * Cree une instance et initialise les executors ainsi que le launcherError - */ - protected SimulationService() { - // on cree un executor par type SimulatorLauncher - Properties prop = IsisFish.config - .getOptionStartsWith(SIMULATION_LAUNCHER); - - // sort simulation names by... names - // this solve "local" "sub", "remote" order - // default "local" is in first in UI. - List<String> simulationKeys = new ArrayList<String>(prop - .stringPropertyNames()); - Collections.sort(simulationKeys); - - for (String key : simulationKeys) { - String value = prop.getProperty(key); - try { - SimulatorLauncher sl = (SimulatorLauncher) ObjectUtil - .newInstance(value); - addSimulationLauncher(sl); - } catch (Exception eee) { - log.warn(_("Can't instantiate %s", value), eee); - } - } - - // fait un appel au moniteur - // pour reprendre le monitoring des simulation en cours - // TODO check this, don't restart monitoring on non ui launch - if (IsisFish.config.isLaunchUI()) { - SimulationMonitor.getInstance().reloadConfig(this); - } - } - - /** - * Permet d'ajouter un nouveau SimulatorLauncher. Cela cree automatiquement - * un executor pour ce SimulatorLauncher. S'il y avait deja un - * SimulatorLauncher de ce type un nouveau est ajoute. - * @param sl le SimulatorLauncher a ajouter - */ - public void addSimulationLauncher(SimulatorLauncher sl) { - SimulationQueue executorQueue = new SimulationQueue(queue); - SimulationExecutor se = new SimulationExecutor(this, sl, executorQueue); - executors.put(sl, se); - launcherError.put(sl, new MutableInt(0)); - } - - /** - * @return les SimulatorLauncher et leurs noms - */ - public List<SimulatorLauncher> getSimulationLaunchers() { - List<SimulatorLauncher> result = new ArrayList<SimulatorLauncher>( - executors.keySet()); - return result; - } - - public Collection<SimulationExecutor> getSimulationExecutors() { - return executors.values(); - } - - public Set<SimulationJob> getJobs() { - return jobs; - } - - public Set<SimulationJob> getJobDones() { - return jobDones; - } - - /** - * Retourne la liste de tous les {@link SimulatorLauncher} disponible - * @return - */ - protected Set<SimulatorLauncher> getSimulatorLaunchers() { - return executors.keySet(); - } - - public void addSimulationServiceListener(SimulationServiceListener l) { - listeners.add(l); - } - - public void removeSimulationServiceListener(SimulationServiceListener l) { - listeners.remove(l); - } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - propertyListeners.addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, - PropertyChangeListener listener) { - propertyListeners.addPropertyChangeListener(propertyName, listener); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - propertyListeners.removePropertyChangeListener(listener); - } - - public void removePropertyChangeListener(String propertyName, - PropertyChangeListener listener) { - propertyListeners.removePropertyChangeListener(propertyName, listener); - } - - /** - * Ajoute le job au job en cours previent s'il n'etait pas deja present - * les listener {@link SimulationServiceListener#simulationStart}. - * @param job - */ - protected void fireStartEvent(SimulationJob job) { - // on ajoute au cas on il n'y serait pas - if (jobs.add(job)) { - idJobs.add(job.getItem().getControl().getId()); - for (SimulationServiceListener l : listeners) { - l.simulationStart(this, job); - } - } - } - - /** - * Supprime le job de la liste des jobs en cours et l'ajoute le job si - * besoin a la liste des jobs faits (s'il y a une erreur ou qu'il ne sagit - * pas d'une simulation lancer par un plan d'analyse). - * Les listener sont prevenu par la methode - * {@link SimulationServiceListener#simulationStop}. - * @param job - */ - protected void fireStopEvent(SimulationJob job) { - jobs.remove(job); - idJobs.remove(job.getItem().getControl().getId()); - - // on ajout au jobDones que les simulations avec erreur ou les - // simulation reellement demande par l'utilisateur (pas de simulation - // de plan - jobDones.add(job); - for (SimulationServiceListener l : listeners) { - l.simulationStop(this, job); - } - } - - /** - * Nettoie la liste des jobs faits - */ - public void clearJobDone() { - jobDones.clear(); - for (SimulationServiceListener l : listeners) { - l.clearJobDone(this); - } - } - - /** - * @return Returns the autoLaunch. - */ - public boolean isAutoLaunch() { - return this.autoLaunch; - } - - /** - * @param autoLaunch The autoLaunch to set. - */ - public void setAutoLaunch(boolean autoLaunch) { - synchronized (this) { - boolean oldValue = this.autoLaunch; - this.autoLaunch = autoLaunch; - if (this.autoLaunch) { - this.notifyAll(); - } - propertyListeners.firePropertyChange("autoLaunch", oldValue, - autoLaunch); - } - } - - /** - * Permet de mettre en attente les threads de simulation si l'utilisateur - * a suspendu la queue - */ - protected void waitAutoLaunch() { - synchronized (this) { - while (!isAutoLaunch()) { - try { - log.info("autoLaunch is false waiting queue start"); - this.wait(); - } catch (InterruptedException eee) { - log.warn("Error during wait autoLaunch flag", eee); - } - } - } - } - - /** - * Permet d'ajouter une nouvelle simulation a la queue. Si la simulation est - * simple ou avec un plan d'experience dependant, un nouveau job est cree - * et directement ajout a la queue de jobs. S'il la simulation est un plan - * ou les simulations sont independantes, toutes les simulations sont - * genere et toute ajoute a la queue de simulation. Mais dans ce cas seul - * la simulation de depart est ajoute au jobs en cours, les simulations - * generees seront ajoutees lors de leur reel execution - * - * @param id l'identifiant de la simulation - * @param param les parametres de la simulation - * @param launcher le launcher a utiliser pour lancer la simulation - * @param priority la priorite de la simulation - */ - public void submit(String id, SimulationParameter param, - SimulatorLauncher launcher, int priority) { - // on l'ajoute tout de suite a la liste des simulations demandee - SimulationControl control = new SimulationControl(id); - SimulationItem item = new SimulationItem(control, param); - SimulationJob job = new SimulationJob(this, item, priority); - job.setLauncher(launcher); - fireStartEvent(job); - - // on construit le zip de la simulation - File zip = prepareSimulationZipFile(control, param, null, true); - item.setSimulationZip(zip); - - if (param.getUseAnalysePlan() && param.isIndependentPlan()) { - // c un plan d'analyse independant, on construit toute les sous simu - Runnable task = new PrepareSimulationJob(this, job); - subSimulationComputationExecutor.execute(task); - } else { - // l'item est fini d'etre initialise, on peut l'ajouter a la queue - // sauf si c'etait un plan independant ou se seront les sous simu - // qui seront dans la queue - submit(job); - } - - } - - /** - * Permet d'ajouter une simulation avec des factors a prendre en compte. - * - * @param id l'identifiant de la simulation - * @param param les parametres de la simulation - * @param launcher le launcher a utiliser pour lancer la simulation - * @param priority la priorite de la simulation - * @param sensitivitycalculator l'implementation du calculateur de sensibilite - * @param designPlan le design plan qui contient les facteurs - */ - public void submit(String id, SimulationParameter param, - SimulatorLauncher launcher, int priority, - SensitivityCalculator sensitivitycalculator, DesignPlan designPlan) { - - try { - // build master sensitivity export directory - File masterExportDirectory = new File(IsisFish.config.getDefaultExportDirectory(), id); - if (!masterExportDirectory.isDirectory()) { - masterExportDirectory.mkdirs(); - } - - // export designplan as XML - // get as XML (before compute) - // compute do bad modification on design plan - String xmlDesignPlan = MexicoHelper.getDesignPlanAsXML(designPlan); - - SensitivityScenarios sensitivityScenarios = sensitivitycalculator - .compute(designPlan, masterExportDirectory); - - // ajout des parametres de simulation - param.setSensitivityCalculator(sensitivitycalculator); - param.setNumberOfSensitivitySimulation(sensitivityScenarios.getScenarios().size()); - - // on l'ajoute tout de suite a la liste des simulations demandee - // init with default "id" must been changed for designPlan - // simulation - SimulationControl controlJustForZip = new SimulationControl(id); - - // on construit le zip de la simulation - // in zip, there will be param "without" prescript - File zip = prepareSimulationZipFile(controlJustForZip, param, xmlDesignPlan, true); - - // for each simulation, we neeed to launch a specific simulation - // new simulation ids will be id + "_" + x - // where x is a int starting at 0 - int simulationIndex = 0; - for (Scenario scenario : sensitivityScenarios.getScenarios()) { - - // modify modification parameter - // subParam only convenient for add pre script - // for launcher - SimulationParameter subParam = param.copy(); - String preScriptContent = generatePreScript(scenario); - subParam.setUsePreScript(true); - subParam.setPreScript(preScriptContent); - - // build new simulation id - String subsimulationId = id + "_" + simulationIndex; - SimulationControl realSimulationControl = new SimulationControl( - subsimulationId); - - // new item, with zip - SimulationItem item = new SimulationItem(realSimulationControl, - subParam); - item.setSimulationZip(zip); - - SimulationJob job = new SimulationJob(this, item, priority); - job.setLauncher(launcher); - fireStartEvent(job); - - if (subParam.getUseAnalysePlan() - && subParam.isIndependentPlan()) { - // c un plan d'analyse independant, on construit toute les sous simu - Runnable task = new PrepareSimulationJob(this, job); - subSimulationComputationExecutor.execute(task); - } else { - // l'item est fini d'etre initialise, on peut l'ajouter a la queue - // sauf si c'etait un plan independant ou se seront les sous simu - // qui seront dans la queue - submit(job); - } - - simulationIndex++; - } - - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Can't get scenarios from calculator", e); - } - } - } - - /** - * Get freemarker configuration. - */ - protected Configuration getFreemarkerConfiguration() { - Configuration configuration = new Configuration(); - - // needed to overwrite "Defaults to default system encoding." - // fix encoding issue on some systems - configuration.setDefaultEncoding("utf-8"); - - // specific template loader to get template from jars (classpath) - TemplateLoader templateLoader = new ClasspathTemplateLoader(); - configuration.setTemplateLoader(templateLoader); - - configuration.setObjectWrapper(new BeansWrapper()); - - return configuration; - } - - /** - * Generate prescript to set factor values before simulation start. - * - * @param scenario - * @return simulation pre script with correct values - * @throws IOException if pre script can't be made - * @throws TemplateException if pre script can't be made - */ - protected String generatePreScript(Scenario scenario) throws IOException, - TemplateException { - - // init one at first call - if (freemarkerConfiguration == null) { - freemarkerConfiguration = getFreemarkerConfiguration(); - } - - Writer out = new StringWriter(); - Template template = freemarkerConfiguration - .getTemplate(SENSITIVITY_PRE_SCRIPT); - Map<String, Object> root = new HashMap<String, Object>(); - root.put("scenario", scenario); - root.put("beanUtils", ConverterUtil.getConverter(null)); - - template.process(root, out); - out.flush(); - String scriptContent = out.toString(); - - if (log.isTraceEnabled()) { - log.trace("Simulation prescript content = " + scriptContent); - } - - return scriptContent; - } - - /** - * Resoumet une simulation qui a deja été démarrée, mais - * on ne faisant que du control de monitoring. - * - * @param id - * @param param - * @param launcher - * @param priority - */ - public void submitForCheckOnly(String id, SimulationParameter param, - SimulatorLauncher launcher, int priority) { - // on l'ajoute tout de suite a la liste des simulations demandee - SimulationControl control = new SimulationControl(id); - SimulationItem item = new SimulationItem(control, param); - SimulationJob job = new SimulationJob(this, item, priority); - job.setLauncher(launcher); - fireStartEvent(job); - - job.setOnlyCheckControl(true); - - //if (param.getUseAnalysePlan() && param.isIndependentPlan()) { - // // c un plan d'analyse independant, on construit toute les sous simu - // Runnable task = new PrepareSimulationJob(this, job); - // subSimulationComputationExecutor.execute(task); - //} else { - // l'item est fini d'etre initialise, on peut l'ajouter a la queue - // sauf si c'etait un plan independant ou se seront les sous simu - // qui seront dans la queue - submit(job); - //} - - } - - protected void submit(SimulationJob job) { - SimulatorLauncher launcher = job.getLauncher(); - // on ajoute a la queue qui utilise le launcher defini dans le job - if (launcher != null) { - for (SimulatorLauncher l : executors.keySet()) { - if (launcher == l) { - log.info(_("Add to %s queue", l)); - SimulationExecutor executor = executors.get(l); - executor.execute(job); - return; - } - } - } - // dernier recours on ajoute a la queue sans launcher - log.info(_("Add to default queue")); - queue.add(job); - } - - /** - * Permet de resoumettre un job qui a ete pris par un thread mais qu'il - * ne peut pas traiter. Cela arrive lorsque l'executor est en pause, ou - * que le launcher de l'executor ne fonctionne plus (il se met en pause - * tout seul) - * - * @param job l'item a resoumettre - */ - protected void resubmit(SimulationJob job) { - submit(job); - } - - /** - * Permet de soumettre a la queue un job provenant d'un plan. - * Ce plan ne doit pas apparaitre dans la console de queue. - * - * @param job - */ - protected void submitSubJob(SimulationJob job) { - submit(job); - } - - /** - * Restart a job. - * - * This method fire "start" event. - * - * @param job job to retstart - */ - public void restart(SimulationJob job) { - job.getItem().getControl().reset(); - fireStartEvent(job); - submit(job); - } - - /** - * Supprime un job de la queue (annulation d'une simulation). Appele - * depuis {@link SimulationJob#stop} - * - * @param job le job a annuler - * @return vrai si la simulation a pu etre annulee avant sont lancement - * (encore presente dans la queue), faux si la simulation a deja ete - * prise par un thread de simulation ou quelle est terminee - */ - protected boolean cancel(SimulationJob job) { - boolean result = queue.remove(job); - return result; - } - - public boolean exists(String id) { - boolean result = idJobs.contains(id); - return result; - } - - /** - * Report une erreur pour un launcher, on resoumet le job en supprimant - * le launcher utilise - * - * @param launcher le launcher posant probleme - * @param job le job qui n'a pas reussi a se faire - */ - protected void reportError(SimulatorLauncher launcher, SimulationJob job) { - MutableInt i = launcherError.get(launcher); - i.setValue(i.intValue() + 1); - // si on a plus de N error, on stop l'executor associe - if (i.intValue() >= 50) { - log.error(_("Launcher %s will be stopped because there are too many error (%s)", - launcher, i.intValue())); - SimulationExecutor e = executors.get(launcher); - e.pause(); - } - // 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 - //job.setLauncher(null); - resubmit(job); - } - - /** - * Permet de genere les sous simulations d'un plan d'analyse. Pour les - * plan independant, on l'utilise en Runnable pour genere tous les plans - * possible et les soumettre a la queue. Pour les plans dependant - * on l'utilise seulement comme iterator. La methode afterSimulation des plans - * est appelee automatiquement a la fin de la simulation grace au mecanisme - * de PostAction sur les {@link SimulationJob}. - */ - public static class PrepareSimulationJob implements Runnable, - Iterator<SimulationJob>, SimulationJob.PostAction { - - protected SimulationService simulationService; - protected AnalysePlanContext planContext; - protected SimulationJob job; - protected SimulationJob nextJob; - protected boolean doNext = true; - protected String id; - protected SimulationControl control; - protected SimulationParameter param; - protected int done = 0; - - public PrepareSimulationJob(SimulationService simulationService, - SimulationJob job) { - this.simulationService = simulationService; - this.job = job; - id = job.getItem().getControl().getId(); - control = job.getItem().getControl(); - param = job.getItem().getParameter(); - this.planContext = new AnalysePlanContext(control.getId(), param); - - try { - // appel de init sur chaque plan - for (AnalysePlan plan : param.getAnalysePlans()) { - plan.init(planContext); - } - } catch (Exception eee) { - throw new IsisFishRuntimeException(_("isisfish.error.evaluate.preplan.script"), eee); - } - } - - /** - * genere toutes les sous simulations et les places dans la queue - */ - public void run() { - while (hasNext()) { - try { - SimulationJob subJob = next(); - log.info("Simulation generee: " + subJob.getId()); - simulationService.submitSubJob(subJob); - } catch (Exception eee) { - log.error(_("Can't add simulation: ", job.getItem() - .getControl().getId()), eee); - } - } - - } - - /** - * Indique s'il y a encore des simulations dans le plan. Par defaut pour - * Eviter les plans sans fin, le nombre de plan genere par simulation - * est limite a {@link SimulationService#MAX_PLAN_SIMULATION} - * - * @return <tt>true</tt> if has next - */ - public boolean hasNext() { - try { - // if user request stop simulation, stop all futur planned simulation - // and if last doNext is false not do next simulation - boolean result = !control.isStopSimulationRequest() && doNext; - if (result) { - - // hasNext() est appelee par un autre thread concurrent - // via la methode finished(SimulationJob, SimulationStorage) - synchronized (this) { - - // si deja creer on ne le refet pas - if (nextJob == null) { - // Prepration de la simulation a faire - // create next id simulation - - // this start a 0 - int planNumber = planContext.getNumber(); - - if (planNumber > MAX_PLAN_SIMULATION) { - log.error(_("Analyse plan error, too many simulation for %s : %s", - id, planNumber)); - doNext = false; - result = false; - } else { - String simId = id + "_" + planNumber; - param.setAnalysePlanNumber(planNumber); - - File tmpDirectory = FileUtil.createTempDirectory( - "isisfish-simulation-", "-preparation"); - SimulationStorage sim = SimulationStorage - .importAndRenameZip(tmpDirectory, job - .getItem().getSimulationZip(), - simId); - sim.getParameter().setAnalysePlanNumber(planNumber); - - // appel de tous les plans pour modifier la simulation - for (AnalysePlan plan : param.getAnalysePlans()) { - result = result - && plan.beforeSimulation(planContext, - sim); - if (!result) { - nextJob = null; - break; - } - } - doNext = result; - if (result) { - File zip = sim.createZip(); - SimulationControl childControl = new SimulationControl( - simId); - SimulationParameter childParam = param.copy(); - SimulationItem item = new SimulationItem( - childControl, childParam); - item.setSimulationZip(zip); - nextJob = new SimulationJob(simulationService, - job, item, job.getPriority()); - nextJob.setLauncher(job.getLauncher()); - nextJob.addPostAction(this); // pour l'appel des after des plans - } - // quoi qu'il arrive on supprime le repertoire temporaire - if (!FileUtil.deleteRecursively(tmpDirectory)) { - log.warn(_("isisfish.error.remove.directory", - tmpDirectory)); - } - } - - // increment number for next simulation job - planContext.incNumber(); - } - } - } - return result; - } catch (Exception eee) { - throw new IsisFishRuntimeException( - _("isisfish.error.evalute.plan.script"), eee); - } - - } - - public SimulationJob next() { - hasNext(); // pour etre sur qu'il a ete appele au moins une fois - SimulationJob result = nextJob; - nextJob = null; - return result; - - } - - public void remove() { - throw new UnsupportedOperationException("Not supported."); - } - - public void finished(SimulationJob job, SimulationStorage sim) { - // doNext = true; - - // appel de tous les plans pour modifier la simulation - for (AnalysePlan plan : sim.getParameter().getAnalysePlans()) { - try { - boolean result = plan.afterSimulation(planContext, sim); - doNext = doNext && result; - } catch (Exception eee) { - log.error(_("Stop simulation plan, because can't call afterSimulation correctly on plan %s", - plan.getClass().getName()), eee); - doNext = false; - } - } - - // une sim vient de se finir, on incremente le compteur - done++; - if (!hasNext() && (done + 1 == planContext.getNumber())) { - // on enleve le master plan des simulations en cours, vu que - // toutes les simu sont terminees - simulationService.fireStopEvent(this.job); - } - } - - public void exception(SimulationJob job, Throwable eee) { - // il y a une simulation d'echoue, on ne fait pas les suivantes - // cela n'impacte pas les plan independant puisque toutes les - // simulation on deja ete generee - doNext = false; - simulationService.fireStopEvent(this.job); - } - } - - /** - * Prepare les fichiers qui seront utilsé à la simulation: - * <li> scripts - * <li> rules - * <li> exports - * <li> simulators - * <li> export de la database de la region - * <li> analyseplan - * <p> - * Le tout est zippé et le zip est retourné, il peut-être directement - * importé dans le {@link SimulationStorage} (en le renommant comme - * il faut {@link SimulationStorage#importAndRenameZip(File, String)}. - * <p> - * Ce zip est automatiquement supprimé à la fin de l'application. - * - * @param control le controleur - * @param param les parametre de la simulation - * @param xmlDesignPlan contenu xml des design plan - * @param compile si vrai la version compile des fichiers Java est aussi - * mise dans le fichier zip. Cela peut servir pour les simulations locales - * pour ne pas recompiler pour chaque simulation avec plan d'analyse - * @return un zip de simulation pour une simulation pret a être faite - * @throws SimulationException pour tout problème rencontré (IO,Topia...) - */ - protected File prepareSimulationZipFile(SimulationControl control, - SimulationParameter param, String xmlDesignPlan, boolean compile) - throws SimulationException { - try { - File tmpDirectory = FileUtil.createTempDirectory( - "isisfish-simulation-", "-preparation"); - //File regionXML = IsisConfig.getDataBackupFile(tmpDirectory); - File regionXML = new File(tmpDirectory, - SimulationStorage.DATA_BACKUP_FILENAME); - - // sauvegarde des parametres - Properties prop = param.toProperties(); - //File f = IsisConfig.getSimulationParametersFile(tmpDirectory); - File f = new File(tmpDirectory, - SimulationStorage.PARAMETERS_FILENAME); - FileOutputStream out = new FileOutputStream(f); - //FileOutputStream out = new FileOutputStream(new File(tmpDirectory, IsisConfig.SIMULATION_PARAMETERS)); - prop.store(out, "Parameters"); - out.close(); - - // backup pour toutes les simulations, pour eviter que l'utilisateur - // ne puisse le modifier en meme temps - control.setText(_("isisfish.message.backup.database.progress")); - RegionStorage region = RegionStorage.getRegion(param - .getRegionName()); - TopiaContext tc = region.getStorage().beginTransaction(); - tc.backup(regionXML, true); - tc.closeContext(); - control.setText(_("isisfish.message.backup.database.finished")); - - // copie de toutes regles a utiliser - List<Rule> rules = param.getRules(); - for (Rule rule : rules) { - String name = RuleStorage.getName(rule); - FileUtil.copy(new File(RuleStorage.getRuleDirectory(), name - + ".java"), - new File(tmpDirectory, RuleStorage.RULE_PATH - + File.separator + name + ".java")); - } - // copie des regles reclamées par les plans d'analyse - for (String name : param.getExtraRules()) { - FileUtil.copy(new File(RuleStorage.getRuleDirectory(), name - + ".java"), - new File(tmpDirectory, RuleStorage.RULE_PATH - + File.separator + name + ".java")); - } - - // copie de toutes regles a utiliser - List<AnalysePlan> plans = param.getAnalysePlans(); - for (AnalysePlan plan : plans) { - String name = AnalysePlanStorage.getName(plan); - FileUtil.copy(new File(AnalysePlanStorage - .getAnalysePlanDirectory(), name + ".java"), new File( - tmpDirectory, AnalysePlanStorage.ANALYSE_PLAN_PATH - + File.separator + name + ".java")); - } - - // copie de tous les exports a utiliser - for (String name : param.getExportNames()) { - name = name.endsWith(".java") ? name : name + ".java"; - FileUtil.copy( - new File(ExportStorage.getExportDirectory(), name), - new File(tmpDirectory, ExportStorage.EXPORT_PATH - + File.separator + name)); - } - - // copie de tous les scripts a utiliser - FileUtil.copyRecursively(ScriptStorage.getScriptDirectory(), - tmpDirectory, ".*\\.java$"); - - // copie de tous les simulateurs a utiliser - FileUtil.copy(new File(SimulatorStorage.getSimulatorDirectory(), - param.getSimulatorName()), new File(tmpDirectory, - SimulatorStorage.SIMULATOR_PATH + File.separator - + param.getSimulatorName())); - - // convert all file to UTF-8 - convertAllFile(control, tmpDirectory); - - if (compile) { - compileAllFile(control, tmpDirectory); - } - - // Sauvegarde du design plan en XML - if (!StringUtils.isEmpty(xmlDesignPlan)) { - File simulationDesignPlanFile = SimulationStorage.getMexicoDesignPlan(tmpDirectory); - FileUtil.writeString(simulationDesignPlanFile, xmlDesignPlan, "utf-8"); - } - - FileUtil.copy(new File(SimulatorStorage.getSimulatorDirectory(), - param.getSimulatorName()), new File(tmpDirectory, - SimulatorStorage.SIMULATOR_PATH + File.separator - + param.getSimulatorName())); - - // creation du zip - File result = new File(tmpDirectory.getPath() + ".zip"); - result.deleteOnExit(); - ZipUtil.compress(result, tmpDirectory, null); - - // poussin 20071015: remove temp directory - if (!FileUtil.deleteRecursively(tmpDirectory)) { - log.warn(_("isisfish.error.remove.directory", tmpDirectory)); - } - - return result; - } catch (IOException eee) { - throw new SimulationException( - _("isisfish.error.prepare.information.simulation"), eee); - } catch (TopiaException eee) { - throw new SimulationException( - _("isisfish.error.prepare.information.simulation"), eee); - } - - } - - /** - * Convertit tous les fichiers du répertoire directory en UTF-8, - * pour eviter les erreurs d'encodage du la compilation - * sur un autre systeme ne supportant pas l'encodage courant. - * - * @param control le controleur - * @param directory le répertoire a convertir - */ - protected void convertAllFile(SimulationControl control, File directory) { - - control.setText("Converting file to unicode"); - - List<File> fileToConvert = new ArrayList<File>(); - - List<File> tmp = FileUtil.find(new File(directory, - ExportStorage.EXPORT_PATH), ".*\\.java$", true); - fileToConvert.addAll(tmp); - - tmp = FileUtil.find(new File(directory, RuleStorage.RULE_PATH), - ".*\\.java$", true); - fileToConvert.addAll(tmp); - - tmp = FileUtil.find(new File(directory, - AnalysePlanStorage.ANALYSE_PLAN_PATH), ".*\\.java$", true); - fileToConvert.addAll(tmp); - - tmp = FileUtil.find( - new File(directory, SimulatorStorage.SIMULATOR_PATH), - ".*\\.java$", true); - fileToConvert.addAll(tmp); - - // - // Convertion - // - CompileHelper.convertToUnicode(fileToConvert); - - } - - /** - * Compile les fichiers présent dans le répertoire passé en - * parametre, ce répertoire est hiérarchisé en: rules, exports, simulators - * et scripts. Seuls les fichiers des 3 premiers répertoires sont compilés - * les fichiers du dernier sont compilé par les dépendances qu'on les autres - * <p> - * Il permet donc de compiler facilement tous les fichiers pour une - * simulation - * - * @param control le controleur - * @param directory le répertoire où compiler - */ - protected void compileAllFile(SimulationControl control, File directory) { - - control.setText("Scripts and rules Compilation"); - long currentTime = System.nanoTime(); - - // - // Recherche des fichiers a compiler - // On ne prend pas les scripts, car ils sont tous copiés mais pas - // forcément util. Lors de la compilation des autres fichiers, les - // script servant réellement seront automatiquement compilé - - List<File> fileToCompile = new ArrayList<File>(); - - List<File> tmp = FileUtil.find(new File(directory, - ExportStorage.EXPORT_PATH), ".*\\.java$", true); - fileToCompile.addAll(tmp); - - tmp = FileUtil.find(new File(directory, RuleStorage.RULE_PATH), - ".*\\.java$", true); - fileToCompile.addAll(tmp); - - tmp = FileUtil.find(new File(directory, - AnalysePlanStorage.ANALYSE_PLAN_PATH), ".*\\.java$", true); - fileToCompile.addAll(tmp); - - tmp = FileUtil.find( - new File(directory, SimulatorStorage.SIMULATOR_PATH), - ".*\\.java$", true); - fileToCompile.addAll(tmp); - - // - // Compilation - // - - CompileHelper.compile(directory, fileToCompile, directory, null); - long time = System.nanoTime() - currentTime; - control.setText(_("isisfish.message.compilation.time", - DurationFormatUtils.formatDuration(time / 1000000, "s'.'S"))); - - } - -} Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java (from rev 2490, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,1087 @@ +/* *##% + * Copyright (C) 2002-2009 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + *##%*/ + +package fr.ifremer.isisfish.simulator.launcher; + +import static org.codelutin.i18n.I18n._; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.TreeSet; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.mutable.MutableInt; +import org.apache.commons.lang.time.DurationFormatUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaContext; +import org.codelutin.topia.TopiaException; +import org.codelutin.util.FileUtil; +import org.codelutin.util.ListenerSet; +import org.codelutin.util.ObjectUtil; +import org.codelutin.util.ZipUtil; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.IsisFishRuntimeException; +import fr.ifremer.isisfish.datastore.AnalysePlanStorage; +import fr.ifremer.isisfish.datastore.ExportStorage; +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.RuleStorage; +import fr.ifremer.isisfish.datastore.ScriptStorage; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.SimulatorStorage; +import fr.ifremer.isisfish.mexico.MexicoHelper; +import fr.ifremer.isisfish.rule.Rule; +import fr.ifremer.isisfish.simulator.AnalysePlan; +import fr.ifremer.isisfish.simulator.AnalysePlanContext; +import fr.ifremer.isisfish.simulator.SimulationControl; +import fr.ifremer.isisfish.simulator.SimulationException; +import fr.ifremer.isisfish.simulator.SimulationParameter; +import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; +import fr.ifremer.isisfish.simulator.sensitivity.Scenario; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; +import fr.ifremer.isisfish.util.ClasspathTemplateLoader; +import fr.ifremer.isisfish.util.CompileHelper; +import fr.ifremer.isisfish.util.ConverterUtil; +import freemarker.cache.TemplateLoader; +import freemarker.ext.beans.BeansWrapper; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; + +/** + * Cette classe est responsable de conservation de toutes les simulations faites + * ou a faire. Pour ajouter une nouvelle simulation on appelle la methode + * {@link #submit}. + * <p> + * Cette classe sert aussi de modele pour le moniteur de queue + * <p> + * Il existe une instance unique pour toute l'application + * <p> + * Lors de l'instanciation de la classe, l'ensemble des + * {@link SimulatorLauncher} disponible est recherche dans la configuration + * et un executor est cree pour chaque. + * <p> + * Si un {@link SimulatorLauncher} genere trop d'erreur (RemoteException) + * Il est alors suspendu pour ne plus etre utilise pour les simulations. + * + * @author poussin + * @version $Revision: 1.0 $ + * + * Last update : $Date: 5 mars 2009 $ + * By : $Author: chatellier $ + */ +public class SimulationService { + + public static final String SIMULATION_LAUNCHER = "simulation.launcher"; + /** nombre maximal de simulation autoriser pour un plan */ + // FIXME a rendre configurable MAX_PLAN_SIMULATION + public static final int MAX_PLAN_SIMULATION = 20000; + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(SimulationService.class); + + protected static SimulationService instance = new SimulationService(); + + /** Freemarker configuration used to get prescripts content. */ + protected Configuration freemarkerConfiguration; + + /** Freemarker pre script template. */ + protected static final String SENSITIVITY_PRE_SCRIPT = "templates/prescript/factorprescript.ftl"; + + /** + * Retourne l'instance du {@link SimulationService} a utiliser + * @return l'instance a utiliser + */ + public static SimulationService getService() { + return instance; + } + + protected PropertyChangeSupport propertyListeners = new PropertyChangeSupport( + this); + protected ListenerSet<SimulationServiceListener> listeners = new ListenerSet<SimulationServiceListener>(); + + // FIXME pouvoir configurer ceci en fichier de config + // FIXME ainsi que la mise a false, lors de la simulation de la derniere + // (sans doute ajoute un boolean, simulationListAsQueue = true|false) + protected boolean autoLaunch = true; + + /** L'executor utilise pour creer toutes les sous simulations des plans + * independants */ + protected ExecutorService subSimulationComputationExecutor = Executors + .newSingleThreadExecutor(); + /** Tous les types de {@link SimulatorLauncher} disponibles, et leur + * executors associe */ + protected Map<SimulatorLauncher, SimulationExecutor> executors = new LinkedHashMap<SimulatorLauncher, SimulationExecutor>(); + /** Le nombre d'erreur pour les SimulatorLauncher */ + protected Map<SimulatorLauncher, MutableInt> launcherError = new HashMap<SimulatorLauncher, MutableInt>(); + /** La queue contenant toutes les simulations a faire */ + protected SimulationQueue queue = new SimulationQueue(); + + /** Contient les identifiants des simulations presentes dans {@link #jobs}*/ + protected Set<String> idJobs = new HashSet<String>(); + /** La liste des jobs existant (queue + job demarre) */ + protected Set<SimulationJob> jobs = new TreeSet<SimulationJob>(); + + /** La liste des jobs termines */ + protected Set<SimulationJob> jobDones = new TreeSet<SimulationJob>(); + + /** + * Cree une instance et initialise les executors ainsi que le launcherError + */ + protected SimulationService() { + // on cree un executor par type SimulatorLauncher + Properties prop = IsisFish.config + .getOptionStartsWith(SIMULATION_LAUNCHER); + + // sort simulation names by... names + // this solve "local" "sub", "remote" order + // default "local" is in first in UI. + List<String> simulationKeys = new ArrayList<String>(prop + .stringPropertyNames()); + Collections.sort(simulationKeys); + + for (String key : simulationKeys) { + String value = prop.getProperty(key); + try { + SimulatorLauncher sl = (SimulatorLauncher) ObjectUtil + .newInstance(value); + addSimulationLauncher(sl); + } catch (Exception eee) { + log.warn(_("Can't instantiate %s", value), eee); + } + } + + // fait un appel au moniteur + // pour reprendre le monitoring des simulation en cours + // TODO check this, don't restart monitoring on non ui launch + if (IsisFish.config.isLaunchUI()) { + SimulationMonitor.getInstance().reloadConfig(this); + } + } + + /** + * Permet d'ajouter un nouveau SimulatorLauncher. Cela cree automatiquement + * un executor pour ce SimulatorLauncher. S'il y avait deja un + * SimulatorLauncher de ce type un nouveau est ajoute. + * @param sl le SimulatorLauncher a ajouter + */ + public void addSimulationLauncher(SimulatorLauncher sl) { + SimulationQueue executorQueue = new SimulationQueue(queue); + SimulationExecutor se = new SimulationExecutor(this, sl, executorQueue); + executors.put(sl, se); + launcherError.put(sl, new MutableInt(0)); + } + + /** + * @return les SimulatorLauncher et leurs noms + */ + public List<SimulatorLauncher> getSimulationLaunchers() { + List<SimulatorLauncher> result = new ArrayList<SimulatorLauncher>( + executors.keySet()); + return result; + } + + public Collection<SimulationExecutor> getSimulationExecutors() { + return executors.values(); + } + + public Set<SimulationJob> getJobs() { + return jobs; + } + + public Set<SimulationJob> getJobDones() { + return jobDones; + } + + /** + * Retourne la liste de tous les {@link SimulatorLauncher} disponible + * @return + */ + protected Set<SimulatorLauncher> getSimulatorLaunchers() { + return executors.keySet(); + } + + public void addSimulationServiceListener(SimulationServiceListener l) { + listeners.add(l); + } + + public void removeSimulationServiceListener(SimulationServiceListener l) { + listeners.remove(l); + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + propertyListeners.addPropertyChangeListener(listener); + } + + public void addPropertyChangeListener(String propertyName, + PropertyChangeListener listener) { + propertyListeners.addPropertyChangeListener(propertyName, listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + propertyListeners.removePropertyChangeListener(listener); + } + + public void removePropertyChangeListener(String propertyName, + PropertyChangeListener listener) { + propertyListeners.removePropertyChangeListener(propertyName, listener); + } + + /** + * Ajoute le job au job en cours previent s'il n'etait pas deja present + * les listener {@link SimulationServiceListener#simulationStart}. + * @param job + */ + protected void fireStartEvent(SimulationJob job) { + // on ajoute au cas on il n'y serait pas + if (jobs.add(job)) { + idJobs.add(job.getItem().getControl().getId()); + for (SimulationServiceListener l : listeners) { + l.simulationStart(this, job); + } + } + } + + /** + * Supprime le job de la liste des jobs en cours et l'ajoute le job si + * besoin a la liste des jobs faits (s'il y a une erreur ou qu'il ne sagit + * pas d'une simulation lancer par un plan d'analyse). + * Les listener sont prevenu par la methode + * {@link SimulationServiceListener#simulationStop}. + * @param job + */ + protected void fireStopEvent(SimulationJob job) { + jobs.remove(job); + idJobs.remove(job.getItem().getControl().getId()); + + // on ajout au jobDones que les simulations avec erreur ou les + // simulation reellement demande par l'utilisateur (pas de simulation + // de plan + jobDones.add(job); + for (SimulationServiceListener l : listeners) { + l.simulationStop(this, job); + } + } + + /** + * Nettoie la liste des jobs faits + */ + public void clearJobDone() { + jobDones.clear(); + for (SimulationServiceListener l : listeners) { + l.clearJobDone(this); + } + } + + /** + * @return Returns the autoLaunch. + */ + public boolean isAutoLaunch() { + return this.autoLaunch; + } + + /** + * @param autoLaunch The autoLaunch to set. + */ + public void setAutoLaunch(boolean autoLaunch) { + synchronized (this) { + boolean oldValue = this.autoLaunch; + this.autoLaunch = autoLaunch; + if (this.autoLaunch) { + this.notifyAll(); + } + propertyListeners.firePropertyChange("autoLaunch", oldValue, + autoLaunch); + } + } + + /** + * Permet de mettre en attente les threads de simulation si l'utilisateur + * a suspendu la queue + */ + protected void waitAutoLaunch() { + synchronized (this) { + while (!isAutoLaunch()) { + try { + log.info("autoLaunch is false waiting queue start"); + this.wait(); + } catch (InterruptedException eee) { + log.warn("Error during wait autoLaunch flag", eee); + } + } + } + } + + /** + * Permet d'ajouter une nouvelle simulation a la queue. Si la simulation est + * simple ou avec un plan d'experience dependant, un nouveau job est cree + * et directement ajout a la queue de jobs. S'il la simulation est un plan + * ou les simulations sont independantes, toutes les simulations sont + * genere et toute ajoute a la queue de simulation. Mais dans ce cas seul + * la simulation de depart est ajoute au jobs en cours, les simulations + * generees seront ajoutees lors de leur reel execution + * + * @param id l'identifiant de la simulation + * @param param les parametres de la simulation + * @param launcher le launcher a utiliser pour lancer la simulation + * @param priority la priorite de la simulation + */ + public void submit(String id, SimulationParameter param, + SimulatorLauncher launcher, int priority) { + // on l'ajoute tout de suite a la liste des simulations demandee + SimulationControl control = new SimulationControl(id); + SimulationItem item = new SimulationItem(control, param); + SimulationJob job = new SimulationJob(this, item, priority); + job.setLauncher(launcher); + fireStartEvent(job); + + // on construit le zip de la simulation + File zip = prepareSimulationZipFile(control, param, null, true); + item.setSimulationZip(zip); + + if (param.getUseAnalysePlan() && param.isIndependentPlan()) { + // c un plan d'analyse independant, on construit toute les sous simu + Runnable task = new PrepareSimulationJob(this, job); + subSimulationComputationExecutor.execute(task); + } else { + // l'item est fini d'etre initialise, on peut l'ajouter a la queue + // sauf si c'etait un plan independant ou se seront les sous simu + // qui seront dans la queue + submit(job); + } + + } + + /** + * Permet d'ajouter une simulation avec des factors a prendre en compte. + * + * @param id l'identifiant de la simulation + * @param param les parametres de la simulation + * @param launcher le launcher a utiliser pour lancer la simulation + * @param priority la priorite de la simulation + * @param sensitivitycalculator l'implementation du calculateur de sensibilite + * @param designPlan le design plan qui contient les facteurs + */ + public void submit(String id, SimulationParameter param, + SimulatorLauncher launcher, int priority, + SensitivityCalculator sensitivitycalculator, DesignPlan designPlan) { + + try { + // build master sensitivity export directory + File masterExportDirectory = new File(IsisFish.config.getDefaultExportDirectory(), id); + if (!masterExportDirectory.isDirectory()) { + masterExportDirectory.mkdirs(); + } + + // export designplan as XML + // get as XML (before compute) + // compute do bad modification on design plan + String xmlDesignPlan = MexicoHelper.getDesignPlanAsXML(designPlan); + + SensitivityScenarios sensitivityScenarios = sensitivitycalculator + .compute(designPlan, masterExportDirectory); + + // ajout des parametres de simulation + param.setSensitivityCalculator(sensitivitycalculator); + param.setNumberOfSensitivitySimulation(sensitivityScenarios.getScenarios().size()); + + // on l'ajoute tout de suite a la liste des simulations demandee + // init with default "id" must been changed for designPlan + // simulation + SimulationControl controlJustForZip = new SimulationControl(id); + + // on construit le zip de la simulation + // in zip, there will be param "without" prescript + File zip = prepareSimulationZipFile(controlJustForZip, param, xmlDesignPlan, true); + + // for each simulation, we neeed to launch a specific simulation + // new simulation ids will be id + "_" + x + // where x is a int starting at 0 + int simulationIndex = 0; + for (Scenario scenario : sensitivityScenarios.getScenarios()) { + + // modify modification parameter + // subParam only convenient for add pre script + // for launcher + SimulationParameter subParam = param.copy(); + String preScriptContent = generatePreScript(scenario); + subParam.setUsePreScript(true); + subParam.setPreScript(preScriptContent); + + // build new simulation id + String subsimulationId = id + "_" + simulationIndex; + SimulationControl realSimulationControl = new SimulationControl( + subsimulationId); + + // new item, with zip + SimulationItem item = new SimulationItem(realSimulationControl, + subParam); + item.setSimulationZip(zip); + + SimulationJob job = new SimulationJob(this, item, priority); + job.setLauncher(launcher); + fireStartEvent(job); + + if (subParam.getUseAnalysePlan() + && subParam.isIndependentPlan()) { + // c un plan d'analyse independant, on construit toute les sous simu + Runnable task = new PrepareSimulationJob(this, job); + subSimulationComputationExecutor.execute(task); + } else { + // l'item est fini d'etre initialise, on peut l'ajouter a la queue + // sauf si c'etait un plan independant ou se seront les sous simu + // qui seront dans la queue + submit(job); + } + + simulationIndex++; + } + + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Can't get scenarios from calculator", e); + } + } + } + + /** + * Get freemarker configuration. + */ + protected Configuration getFreemarkerConfiguration() { + Configuration configuration = new Configuration(); + + // needed to overwrite "Defaults to default system encoding." + // fix encoding issue on some systems + configuration.setDefaultEncoding("utf-8"); + + // specific template loader to get template from jars (classpath) + TemplateLoader templateLoader = new ClasspathTemplateLoader(); + configuration.setTemplateLoader(templateLoader); + + configuration.setObjectWrapper(new BeansWrapper()); + + return configuration; + } + + /** + * Generate prescript to set factor values before simulation start. + * + * @param scenario + * @return simulation pre script with correct values + * @throws IOException if pre script can't be made + * @throws TemplateException if pre script can't be made + */ + protected String generatePreScript(Scenario scenario) throws IOException, + TemplateException { + + // init one at first call + if (freemarkerConfiguration == null) { + freemarkerConfiguration = getFreemarkerConfiguration(); + } + + Writer out = new StringWriter(); + Template template = freemarkerConfiguration + .getTemplate(SENSITIVITY_PRE_SCRIPT); + Map<String, Object> root = new HashMap<String, Object>(); + root.put("scenario", scenario); + root.put("beanUtils", ConverterUtil.getConverter(null)); + + template.process(root, out); + out.flush(); + String scriptContent = out.toString(); + + if (log.isTraceEnabled()) { + log.trace("Simulation prescript content = " + scriptContent); + } + + return scriptContent; + } + + /** + * Resoumet une simulation qui a deja été démarrée, mais + * on ne faisant que du control de monitoring. + * + * @param id + * @param param + * @param launcher + * @param priority + */ + public void submitForCheckOnly(String id, SimulationParameter param, + SimulatorLauncher launcher, int priority) { + // on l'ajoute tout de suite a la liste des simulations demandee + SimulationControl control = new SimulationControl(id); + SimulationItem item = new SimulationItem(control, param); + SimulationJob job = new SimulationJob(this, item, priority); + job.setLauncher(launcher); + fireStartEvent(job); + + job.setOnlyCheckControl(true); + + //if (param.getUseAnalysePlan() && param.isIndependentPlan()) { + // // c un plan d'analyse independant, on construit toute les sous simu + // Runnable task = new PrepareSimulationJob(this, job); + // subSimulationComputationExecutor.execute(task); + //} else { + // l'item est fini d'etre initialise, on peut l'ajouter a la queue + // sauf si c'etait un plan independant ou se seront les sous simu + // qui seront dans la queue + submit(job); + //} + + } + + protected void submit(SimulationJob job) { + SimulatorLauncher launcher = job.getLauncher(); + // on ajoute a la queue qui utilise le launcher defini dans le job + if (launcher != null) { + for (SimulatorLauncher l : executors.keySet()) { + if (launcher == l) { + log.info(_("Add to %s queue", l)); + SimulationExecutor executor = executors.get(l); + executor.execute(job); + return; + } + } + } + // dernier recours on ajoute a la queue sans launcher + log.info(_("Add to default queue")); + queue.add(job); + } + + /** + * Permet de resoumettre un job qui a ete pris par un thread mais qu'il + * ne peut pas traiter. Cela arrive lorsque l'executor est en pause, ou + * que le launcher de l'executor ne fonctionne plus (il se met en pause + * tout seul) + * + * @param job l'item a resoumettre + */ + protected void resubmit(SimulationJob job) { + submit(job); + } + + /** + * Permet de soumettre a la queue un job provenant d'un plan. + * Ce plan ne doit pas apparaitre dans la console de queue. + * + * @param job + */ + protected void submitSubJob(SimulationJob job) { + submit(job); + } + + /** + * Restart a job. + * + * This method fire "start" event. + * + * @param job job to retstart + */ + public void restart(SimulationJob job) { + job.getItem().getControl().reset(); + fireStartEvent(job); + submit(job); + } + + /** + * Supprime un job de la queue (annulation d'une simulation). Appele + * depuis {@link SimulationJob#stop} + * + * @param job le job a annuler + * @return vrai si la simulation a pu etre annulee avant sont lancement + * (encore presente dans la queue), faux si la simulation a deja ete + * prise par un thread de simulation ou quelle est terminee + */ + protected boolean cancel(SimulationJob job) { + boolean result = queue.remove(job); + return result; + } + + public boolean exists(String id) { + boolean result = idJobs.contains(id); + return result; + } + + /** + * Report une erreur pour un launcher, on resoumet le job en supprimant + * le launcher utilise + * + * @param launcher le launcher posant probleme + * @param job le job qui n'a pas reussi a se faire + */ + protected void reportError(SimulatorLauncher launcher, SimulationJob job) { + MutableInt i = launcherError.get(launcher); + i.setValue(i.intValue() + 1); + // si on a plus de N error, on stop l'executor associe + if (i.intValue() >= 50) { + log.error(_("Launcher %s will be stopped because there are too many error (%s)", + launcher, i.intValue())); + SimulationExecutor e = executors.get(launcher); + e.pause(); + } + // 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 + //job.setLauncher(null); + resubmit(job); + } + + /** + * Permet de genere les sous simulations d'un plan d'analyse. Pour les + * plan independant, on l'utilise en Runnable pour genere tous les plans + * possible et les soumettre a la queue. Pour les plans dependant + * on l'utilise seulement comme iterator. La methode afterSimulation des plans + * est appelee automatiquement a la fin de la simulation grace au mecanisme + * de PostAction sur les {@link SimulationJob}. + */ + public static class PrepareSimulationJob implements Runnable, + Iterator<SimulationJob>, SimulationJob.PostAction { + + protected SimulationService simulationService; + protected AnalysePlanContext planContext; + protected SimulationJob job; + protected SimulationJob nextJob; + protected boolean doNext = true; + protected String id; + protected SimulationControl control; + protected SimulationParameter param; + protected int done = 0; + + public PrepareSimulationJob(SimulationService simulationService, + SimulationJob job) { + this.simulationService = simulationService; + this.job = job; + id = job.getItem().getControl().getId(); + control = job.getItem().getControl(); + param = job.getItem().getParameter(); + this.planContext = new AnalysePlanContext(control.getId(), param); + + try { + // appel de init sur chaque plan + for (AnalysePlan plan : param.getAnalysePlans()) { + plan.init(planContext); + } + } catch (Exception eee) { + throw new IsisFishRuntimeException(_("isisfish.error.evaluate.preplan.script"), eee); + } + } + + /** + * genere toutes les sous simulations et les places dans la queue + */ + public void run() { + while (hasNext()) { + try { + SimulationJob subJob = next(); + log.info("Simulation generee: " + subJob.getId()); + simulationService.submitSubJob(subJob); + } catch (Exception eee) { + log.error(_("Can't add simulation: ", job.getItem() + .getControl().getId()), eee); + } + } + + } + + /** + * Indique s'il y a encore des simulations dans le plan. Par defaut pour + * Eviter les plans sans fin, le nombre de plan genere par simulation + * est limite a {@link SimulationService#MAX_PLAN_SIMULATION} + * + * @return <tt>true</tt> if has next + */ + public boolean hasNext() { + try { + // if user request stop simulation, stop all futur planned simulation + // and if last doNext is false not do next simulation + boolean result = !control.isStopSimulationRequest() && doNext; + if (result) { + + // hasNext() est appelee par un autre thread concurrent + // via la methode finished(SimulationJob, SimulationStorage) + synchronized (this) { + + // si deja creer on ne le refet pas + if (nextJob == null) { + // Prepration de la simulation a faire + // create next id simulation + + // this start a 0 + int planNumber = planContext.getNumber(); + + if (planNumber > MAX_PLAN_SIMULATION) { + log.error(_("Analyse plan error, too many simulation for %s : %s", + id, planNumber)); + doNext = false; + result = false; + } else { + String simId = id + "_" + planNumber; + param.setAnalysePlanNumber(planNumber); + + File tmpDirectory = FileUtil.createTempDirectory( + "isisfish-simulation-", "-preparation"); + SimulationStorage sim = SimulationStorage + .importAndRenameZip(tmpDirectory, job + .getItem().getSimulationZip(), + simId); + sim.getParameter().setAnalysePlanNumber(planNumber); + + // appel de tous les plans pour modifier la simulation + for (AnalysePlan plan : param.getAnalysePlans()) { + result = result + && plan.beforeSimulation(planContext, + sim); + if (!result) { + nextJob = null; + break; + } + } + doNext = result; + if (result) { + File zip = sim.createZip(); + SimulationControl childControl = new SimulationControl( + simId); + SimulationParameter childParam = param.copy(); + SimulationItem item = new SimulationItem( + childControl, childParam); + item.setSimulationZip(zip); + nextJob = new SimulationJob(simulationService, + job, item, job.getPriority()); + nextJob.setLauncher(job.getLauncher()); + nextJob.addPostAction(this); // pour l'appel des after des plans + } + // quoi qu'il arrive on supprime le repertoire temporaire + if (!FileUtil.deleteRecursively(tmpDirectory)) { + log.warn(_("isisfish.error.remove.directory", + tmpDirectory)); + } + } + + // increment number for next simulation job + planContext.incNumber(); + } + } + } + return result; + } catch (Exception eee) { + throw new IsisFishRuntimeException( + _("isisfish.error.evalute.plan.script"), eee); + } + + } + + public SimulationJob next() { + hasNext(); // pour etre sur qu'il a ete appele au moins une fois + SimulationJob result = nextJob; + nextJob = null; + return result; + + } + + public void remove() { + throw new UnsupportedOperationException("Not supported."); + } + + public void finished(SimulationJob job, SimulationStorage sim) { + // doNext = true; + + // appel de tous les plans pour modifier la simulation + // EC20090716 : use param.getAnalysePlans() instances, + // not sim.getParameters().getAnalysePlans() not sames !!! + for (AnalysePlan plan : param.getAnalysePlans()) { + try { + boolean result = plan.afterSimulation(planContext, sim); + doNext = doNext && result; + } catch (Exception eee) { + log.error(_("Stop simulation plan, because can't call afterSimulation correctly on plan %s", + plan.getClass().getName()), eee); + doNext = false; + } + } + + // une sim vient de se finir, on incremente le compteur + done++; + if (!hasNext() && (done + 1 == planContext.getNumber())) { + // on enleve le master plan des simulations en cours, vu que + // toutes les simu sont terminees + simulationService.fireStopEvent(this.job); + } + } + + public void exception(SimulationJob job, Throwable eee) { + // il y a une simulation d'echoue, on ne fait pas les suivantes + // cela n'impacte pas les plan independant puisque toutes les + // simulation on deja ete generee + doNext = false; + simulationService.fireStopEvent(this.job); + } + } + + /** + * Prepare les fichiers qui seront utilsé à la simulation: + * <li> scripts + * <li> rules + * <li> exports + * <li> simulators + * <li> export de la database de la region + * <li> analyseplan + * <p> + * Le tout est zippé et le zip est retourné, il peut-être directement + * importé dans le {@link SimulationStorage} (en le renommant comme + * il faut {@link SimulationStorage#importAndRenameZip(File, String)}. + * <p> + * Ce zip est automatiquement supprimé à la fin de l'application. + * + * @param control le controleur + * @param param les parametre de la simulation + * @param xmlDesignPlan contenu xml des design plan + * @param compile si vrai la version compile des fichiers Java est aussi + * mise dans le fichier zip. Cela peut servir pour les simulations locales + * pour ne pas recompiler pour chaque simulation avec plan d'analyse + * @return un zip de simulation pour une simulation pret a être faite + * @throws SimulationException pour tout problème rencontré (IO,Topia...) + */ + protected File prepareSimulationZipFile(SimulationControl control, + SimulationParameter param, String xmlDesignPlan, boolean compile) + throws SimulationException { + try { + File tmpDirectory = FileUtil.createTempDirectory( + "isisfish-simulation-", "-preparation"); + //File regionXML = IsisConfig.getDataBackupFile(tmpDirectory); + File regionXML = new File(tmpDirectory, + SimulationStorage.DATA_BACKUP_FILENAME); + + // sauvegarde des parametres + Properties prop = param.toProperties(); + //File f = IsisConfig.getSimulationParametersFile(tmpDirectory); + File f = new File(tmpDirectory, + SimulationStorage.PARAMETERS_FILENAME); + FileOutputStream out = new FileOutputStream(f); + //FileOutputStream out = new FileOutputStream(new File(tmpDirectory, IsisConfig.SIMULATION_PARAMETERS)); + prop.store(out, "Parameters"); + out.close(); + + // backup pour toutes les simulations, pour eviter que l'utilisateur + // ne puisse le modifier en meme temps + control.setText(_("isisfish.message.backup.database.progress")); + RegionStorage region = RegionStorage.getRegion(param + .getRegionName()); + TopiaContext tc = region.getStorage().beginTransaction(); + tc.backup(regionXML, true); + tc.closeContext(); + control.setText(_("isisfish.message.backup.database.finished")); + + // copie de toutes regles a utiliser + List<Rule> rules = param.getRules(); + for (Rule rule : rules) { + String name = RuleStorage.getName(rule); + FileUtil.copy(new File(RuleStorage.getRuleDirectory(), name + + ".java"), + new File(tmpDirectory, RuleStorage.RULE_PATH + + File.separator + name + ".java")); + } + // copie des regles reclamées par les plans d'analyse + for (String name : param.getExtraRules()) { + FileUtil.copy(new File(RuleStorage.getRuleDirectory(), name + + ".java"), + new File(tmpDirectory, RuleStorage.RULE_PATH + + File.separator + name + ".java")); + } + + // copie de toutes regles a utiliser + List<AnalysePlan> plans = param.getAnalysePlans(); + for (AnalysePlan plan : plans) { + String name = AnalysePlanStorage.getName(plan); + FileUtil.copy(new File(AnalysePlanStorage + .getAnalysePlanDirectory(), name + ".java"), new File( + tmpDirectory, AnalysePlanStorage.ANALYSE_PLAN_PATH + + File.separator + name + ".java")); + } + + // copie de tous les exports a utiliser + for (String name : param.getExportNames()) { + name = name.endsWith(".java") ? name : name + ".java"; + FileUtil.copy( + new File(ExportStorage.getExportDirectory(), name), + new File(tmpDirectory, ExportStorage.EXPORT_PATH + + File.separator + name)); + } + + // copie de tous les scripts a utiliser + FileUtil.copyRecursively(ScriptStorage.getScriptDirectory(), + tmpDirectory, ".*\\.java$"); + + // copie de tous les simulateurs a utiliser + FileUtil.copy(new File(SimulatorStorage.getSimulatorDirectory(), + param.getSimulatorName()), new File(tmpDirectory, + SimulatorStorage.SIMULATOR_PATH + File.separator + + param.getSimulatorName())); + + // convert all file to UTF-8 + convertAllFile(control, tmpDirectory); + + if (compile) { + compileAllFile(control, tmpDirectory); + } + + // Sauvegarde du design plan en XML + if (!StringUtils.isEmpty(xmlDesignPlan)) { + File simulationDesignPlanFile = SimulationStorage.getMexicoDesignPlan(tmpDirectory); + FileUtil.writeString(simulationDesignPlanFile, xmlDesignPlan, "utf-8"); + } + + FileUtil.copy(new File(SimulatorStorage.getSimulatorDirectory(), + param.getSimulatorName()), new File(tmpDirectory, + SimulatorStorage.SIMULATOR_PATH + File.separator + + param.getSimulatorName())); + + // creation du zip + File result = new File(tmpDirectory.getPath() + ".zip"); + result.deleteOnExit(); + ZipUtil.compress(result, tmpDirectory, null); + + // poussin 20071015: remove temp directory + if (!FileUtil.deleteRecursively(tmpDirectory)) { + log.warn(_("isisfish.error.remove.directory", tmpDirectory)); + } + + return result; + } catch (IOException eee) { + throw new SimulationException( + _("isisfish.error.prepare.information.simulation"), eee); + } catch (TopiaException eee) { + throw new SimulationException( + _("isisfish.error.prepare.information.simulation"), eee); + } + + } + + /** + * Convertit tous les fichiers du répertoire directory en UTF-8, + * pour eviter les erreurs d'encodage du la compilation + * sur un autre systeme ne supportant pas l'encodage courant. + * + * @param control le controleur + * @param directory le répertoire a convertir + */ + protected void convertAllFile(SimulationControl control, File directory) { + + control.setText("Converting file to unicode"); + + List<File> fileToConvert = new ArrayList<File>(); + + List<File> tmp = FileUtil.find(new File(directory, + ExportStorage.EXPORT_PATH), ".*\\.java$", true); + fileToConvert.addAll(tmp); + + tmp = FileUtil.find(new File(directory, RuleStorage.RULE_PATH), + ".*\\.java$", true); + fileToConvert.addAll(tmp); + + tmp = FileUtil.find(new File(directory, + AnalysePlanStorage.ANALYSE_PLAN_PATH), ".*\\.java$", true); + fileToConvert.addAll(tmp); + + tmp = FileUtil.find( + new File(directory, SimulatorStorage.SIMULATOR_PATH), + ".*\\.java$", true); + fileToConvert.addAll(tmp); + + // + // Convertion + // + CompileHelper.convertToUnicode(fileToConvert); + + } + + /** + * Compile les fichiers présent dans le répertoire passé en + * parametre, ce répertoire est hiérarchisé en: rules, exports, simulators + * et scripts. Seuls les fichiers des 3 premiers répertoires sont compilés + * les fichiers du dernier sont compilé par les dépendances qu'on les autres + * <p> + * Il permet donc de compiler facilement tous les fichiers pour une + * simulation + * + * @param control le controleur + * @param directory le répertoire où compiler + */ + protected void compileAllFile(SimulationControl control, File directory) { + + control.setText("Scripts and rules Compilation"); + long currentTime = System.nanoTime(); + + // + // Recherche des fichiers a compiler + // On ne prend pas les scripts, car ils sont tous copiés mais pas + // forcément util. Lors de la compilation des autres fichiers, les + // script servant réellement seront automatiquement compilé + + List<File> fileToCompile = new ArrayList<File>(); + + List<File> tmp = FileUtil.find(new File(directory, + ExportStorage.EXPORT_PATH), ".*\\.java$", true); + fileToCompile.addAll(tmp); + + tmp = FileUtil.find(new File(directory, RuleStorage.RULE_PATH), + ".*\\.java$", true); + fileToCompile.addAll(tmp); + + tmp = FileUtil.find(new File(directory, + AnalysePlanStorage.ANALYSE_PLAN_PATH), ".*\\.java$", true); + fileToCompile.addAll(tmp); + + tmp = FileUtil.find( + new File(directory, SimulatorStorage.SIMULATOR_PATH), + ".*\\.java$", true); + fileToCompile.addAll(tmp); + + // + // Compilation + // + + CompileHelper.compile(directory, fileToCompile, directory, null); + long time = System.nanoTime() - currentTime; + control.setText(_("isisfish.message.compilation.time", + DurationFormatUtils.formatDuration(time / 1000000, "s'.'S"))); + + } + +} Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,283 +0,0 @@ -<!-- -/* *##% - * Copyright (C) 2005 - 2009 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 published by the Free Software Foundation; either version 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ - --> -<fr.ifremer.isisfish.ui.input.InputContentUI> - - <!-- bean property --> - <fr.ifremer.isisfish.entities.SetOfVesselsImpl id='bean' javaBean='null'/> - <fr.ifremer.isisfish.entities.EffortDescriptionImpl id='effortDescription' javaBean='null'/> - - <script><![CDATA[ -import java.util.ArrayList; -import fr.ifremer.isisfish.entities.EffortDescription; -import fr.ifremer.isisfish.entities.EffortDescriptionImpl; -import fr.ifremer.isisfish.entities.SetOfVesselsImpl; -import fr.ifremer.isisfish.entities.SetOfVessels; -import fr.ifremer.isisfish.types.TimeUnit; -import fr.ifremer.isisfish.ui.input.setofvessels.EffortDescriptionListModel; -import fr.ifremer.isisfish.ui.input.setofvessels.EffortDescriptionListRenderer; - -addPropertyChangeListener("effortDescription", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getOldValue() != null || evt.getNewValue() == null) { - fieldEffortDescriptionFishingOperation.setText(""); - fieldEffortDescriptionFishingOperationDuration.setText(""); - fieldEffortDescriptionGearsNumberPerOperation.setText(""); - fieldEffortDescriptionCrewSize.setText(""); - fieldEffortDescriptionUnitCostOfFishing.setText(""); - fieldEffortDescriptionFixedCrewSalary.setText(""); - fieldEffortDescriptionCrewFoodCost.setText(""); - fieldEffortDescriptionCrewShareRate.setText(""); - fieldEffortDescriptionRepairAndMaintenanceGearCost.setText(""); - fieldEffortDescriptionLandingCosts.setText(""); - fieldEffortDescriptionOtherRunningCost.setText(""); - } - if (evt.getNewValue() != null) { - - } - } -}); - - at Override -public void refresh() { - SetOfVessels setOfVessels = getVerifier().getEntity(SetOfVessels.class); - - // twice event for jaxx bindings detection - setBean(null); - setBean((SetOfVesselsImpl) setOfVessels); - - EffortDescriptionListModel model = new EffortDescriptionListModel(); - // getBean().getPossibleMetiers() can be null at region creation - if (getBean() != null && getBean().getPossibleMetiers() != null) { - java.util.List<EffortDescription> effortDescriptions = new ArrayList<EffortDescription>(getBean().getPossibleMetiers()); - model.setEffortDescriptions(effortDescriptions); - } - fieldEffortDescriptionEffortDescriptionList.setModel(model); -} - - at Override -public void setActionButtons() { - getVerifier().setSaveButton(save); - getVerifier().setCancelButton(cancel); -} - -protected void effortDescriptionSelectionChanged() { - EffortDescriptionImpl selectedEffort = (EffortDescriptionImpl)fieldEffortDescriptionEffortDescriptionList.getSelectedValue(); - setEffortDescription(selectedEffort); - - if (getEffortDescription() != null) { - getVerifier().addCurrentEntity(getEffortDescription()); - - /* NumberEditor is not working - fieldEffortDescriptionFishingOperation.init(); - fieldEffortDescriptionGearsNumberPerOperation.init(); - fieldEffortDescriptionCrewSize.init(); - fieldEffortDescriptionUnitCostOfFishing.init(); - fieldEffortDescriptionFixedCrewSalary.init(); - fieldEffortDescriptionCrewFoodCost.init(); - fieldEffortDescriptionCrewShareRate.init(); - fieldEffortDescriptionRepairAndMaintenanceGearCost.init(); - fieldEffortDescriptionLandingCosts.init(); - fieldEffortDescriptionOtherRunningCost.init();*/ - } -} - ]]> - </script> - <Table> - <row> - <cell rows='3' fill='both' weightx='0.4' weighty='1.0'> - <JScrollPane> - <JList id="fieldEffortDescriptionEffortDescriptionList" selectionMode="{javax.swing.ListSelectionModel.SINGLE_SELECTION}" - onValueChanged='effortDescriptionSelectionChanged()' - cellRenderer='{new EffortDescriptionListRenderer()}' - enabled='{isActif()}' decorator='boxed' /> - </JScrollPane> - </cell> - <cell columns='2' fill='both' weightx='1.0'> - <Table border='{BorderFactory.createTitledBorder(_("isisfish.effortDescription.effortTitle"))}'> - <row> - <cell anchor='east'> - <JLabel text="isisfish.effortDescription.fishingOperation" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0'> - <!--NumberEditor id='fieldEffortDescriptionFishingOperation' constructorParams='this' - bean='{getEffortDescription()}' property='fishingOperation' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"FishingOperation"'/--> - <JFormattedTextField id="fieldEffortDescriptionFishingOperation" text='{getEffortDescription().getFishingOperation()}' - onKeyReleased='getEffortDescription().setFishingOperation(Integer.parseInt(fieldEffortDescriptionFishingOperation.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"FishingOperation"'/> - </cell> - </row> - <row> - <cell anchor='east'> - <JLabel text="isisfish.effortDescription.fishingOperationDuration" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0'> - <JTextField id="fieldEffortDescriptionFishingOperationDuration" - text='{getEffortDescription().getFishingOperationDuration() == null ? "" : getEffortDescription().getFishingOperationDuration().getHour()}' - toolTipText="isisfish.effortDescription.fishingOperationDuration.tooltip" onKeyReleased='getEffortDescription().setFishingOperationDuration(new TimeUnit(3600 * Double.parseDouble(fieldEffortDescriptionFishingOperationDuration.getText())))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"FishingOperationDuration"'/> - </cell> - </row> - <row> - <cell anchor='east'> - <JLabel text="isisfish.effortDescription.gearsNumberPerOperation" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0'> - <!--NumberEditor id='fieldEffortDescriptionGearsNumberPerOperation' constructorParams='this' - bean='{getEffortDescription()}' property='gearsNumberPerOperation' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"GearsNumberPerOperation"'/--> - <JTextField id="fieldEffortDescriptionGearsNumberPerOperation" text='{getEffortDescription().getGearsNumberPerOperation()}' - onKeyReleased='getEffortDescription().setGearsNumberPerOperation(Integer.parseInt(fieldEffortDescriptionGearsNumberPerOperation.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"GearsNumberPerOperation"'/> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell columns='2' fill='both' weighty='1.0'> - <Table anchor='north' fill='both' weighty='1.0' border='{BorderFactory.createTitledBorder(_("isisfish.effortDescription.economicTitle"))}'> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.crewSize" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionCrewSize' constructorParams='this' - bean='{getEffortDescription()}' property='crewSize' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"CrewSize"'/--> - <JTextField id="fieldEffortDescriptionCrewSize" text='{getEffortDescription().getCrewSize()}' - onKeyReleased='getEffortDescription().setCrewSize(Integer.parseInt(fieldEffortDescriptionCrewSize.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"CrewSize"'/> - </cell> - </row> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.unitCostOfFishing" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionUnitCostOfFishing' constructorParams='this' - bean='{getEffortDescription()}' property='unitCostOfFishing' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"UnitCostOfFishing"'/--> - <JTextField id="fieldEffortDescriptionUnitCostOfFishing" text='{getEffortDescription().getUnitCostOfFishing()}' - onKeyReleased='getEffortDescription().setUnitCostOfFishing(Double.parseDouble(fieldEffortDescriptionUnitCostOfFishing.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"UnitCostOfFishing"'/> - </cell> - </row> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.fixedCrewSalary" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionFixedCrewSalary' constructorParams='this' - bean='{getEffortDescription()}' property='fixedCrewSalary' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"FixedCrewSalary"'/--> - <JTextField id="fieldEffortDescriptionFixedCrewSalary" text='{getEffortDescription().getFixedCrewSalary()}' - onKeyReleased='getEffortDescription().setFixedCrewSalary(Double.parseDouble(fieldEffortDescriptionFixedCrewSalary.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"FixedCrewSalary"'/> - </cell> - </row> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.crewFoodCost" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionCrewFoodCost' constructorParams='this' - bean='{getEffortDescription()}' property='crewFoodCost' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"CrewFoodCost"'/--> - <JTextField id="fieldEffortDescriptionCrewFoodCost" text='{getEffortDescription().getCrewFoodCost()}' - onKeyReleased='getEffortDescription().setCrewFoodCost(Double.parseDouble(fieldEffortDescriptionCrewFoodCost.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"CrewFoodCost"'/> - </cell> - </row> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.crewShareRate" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionCrewShareRate' constructorParams='this' - bean='{getEffortDescription()}' property='crewShareRate' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"CrewShareRate"'/--> - <JTextField id="fieldEffortDescriptionCrewShareRate" text='{getEffortDescription().getCrewShareRate()}' - onKeyReleased='getEffortDescription().setCrewShareRate(Double.parseDouble(fieldEffortDescriptionCrewShareRate.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"CrewShareRate"'/> - </cell> - </row> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.repairAndMaintenanceGearCost" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionRepairAndMaintenanceGearCost' constructorParams='this' - bean='{getEffortDescription()}' property='repairAndMaintenanceGearCost' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' - _method='"RepairAndMaintenanceGearCost"' useSign='true'/--> - <JTextField id="fieldEffortDescriptionRepairAndMaintenanceGearCost" text='{getEffortDescription().getRepairAndMaintenanceGearCost()}' - onKeyReleased='getEffortDescription().setRepairAndMaintenanceGearCost(Double.parseDouble(fieldEffortDescriptionRepairAndMaintenanceGearCost.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"RepairAndMaintenanceGearCost"'/> - </cell> - </row> - <row> - <cell anchor='east' fill='none' weighty='0.0'> - <JLabel text="isisfish.effortDescription.landingCosts" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0' weighty='0.0'> - <!--NumberEditor id='fieldEffortDescriptionLandingCosts' constructorParams='this' - bean='{getEffortDescription()}' property='landingCosts' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"LandingCosts"'/--> - <JTextField id="fieldEffortDescriptionLandingCosts" text='{getEffortDescription().getLandingCosts()}' - onKeyReleased='getEffortDescription().setLandingCosts(Double.parseDouble(fieldEffortDescriptionLandingCosts.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"LandingCosts"'/> - </cell> - </row> - <row> - <cell anchor='northeast' fill='none' weighty='1.0'> - <JLabel text="isisfish.effortDescription.otherRunningCost" enabled='{isActif()}'/> - </cell> - <cell anchor='north' fill='horizontal' weightx='1.0' weighty='1.0'> - <!--NumberEditor id='fieldEffortDescriptionOtherRunningCost' constructorParams='this' - bean='{getEffortDescription()}' property='otherRunningCost' - enabled='{isActif()}' decorator='boxed' useSign='true' - _bean='{EffortDescriptionImpl.class}' _method='"OtherRunningCost"'/--> - <JTextField id="fieldEffortDescriptionOtherRunningCost" text='{getEffortDescription().getOtherRunningCost()}' - onKeyReleased='getEffortDescription().setOtherRunningCost(Double.parseDouble(fieldEffortDescriptionOtherRunningCost.getText()))' - enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"OtherRunningCost"'/> - </cell> - </row> - </Table> - </cell> - </row> - <row> - <cell fill='horizontal' weightx='0.3'> - <JButton id='save' decorator='boxed'/> - </cell> - <cell fill='horizontal' weightx='0.3'> - <JButton id='cancel' decorator='boxed'/> - </cell> - </row> - </Table> -</fr.ifremer.isisfish.ui.input.InputContentUI> Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx (from rev 2491, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/EffortDescriptionParametersUI.jaxx 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,283 @@ +<!-- +/* *##% + * Copyright (C) 2005 - 2009 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 published by the Free Software Foundation; either version 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + --> +<fr.ifremer.isisfish.ui.input.InputContentUI> + + <!-- bean property --> + <fr.ifremer.isisfish.entities.SetOfVesselsImpl id='bean' javaBean='null'/> + <fr.ifremer.isisfish.entities.EffortDescriptionImpl id='effortDescription' javaBean='null'/> + + <script><![CDATA[ +import java.util.ArrayList; +import fr.ifremer.isisfish.entities.EffortDescription; +import fr.ifremer.isisfish.entities.EffortDescriptionImpl; +import fr.ifremer.isisfish.entities.SetOfVesselsImpl; +import fr.ifremer.isisfish.entities.SetOfVessels; +import fr.ifremer.isisfish.types.TimeUnit; +import fr.ifremer.isisfish.ui.input.setofvessels.EffortDescriptionListModel; +import fr.ifremer.isisfish.ui.input.setofvessels.EffortDescriptionListRenderer; + +addPropertyChangeListener("effortDescription", new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getOldValue() != null || evt.getNewValue() == null) { + fieldEffortDescriptionFishingOperation.setText(""); + fieldEffortDescriptionFishingOperationDuration.setText(""); + fieldEffortDescriptionGearsNumberPerOperation.setText(""); + fieldEffortDescriptionCrewSize.setText(""); + fieldEffortDescriptionUnitCostOfFishing.setText(""); + fieldEffortDescriptionFixedCrewSalary.setText(""); + fieldEffortDescriptionCrewFoodCost.setText(""); + fieldEffortDescriptionCrewShareRate.setText(""); + fieldEffortDescriptionRepairAndMaintenanceGearCost.setText(""); + fieldEffortDescriptionLandingCosts.setText(""); + fieldEffortDescriptionOtherRunningCost.setText(""); + } + if (evt.getNewValue() != null) { + + } + } +}); + + at Override +public void refresh() { + SetOfVessels setOfVessels = getVerifier().getEntity(SetOfVessels.class); + + // twice event for jaxx bindings detection + setBean(null); + setBean((SetOfVesselsImpl) setOfVessels); + + EffortDescriptionListModel model = new EffortDescriptionListModel(); + // getBean().getPossibleMetiers() can be null at region creation + if (getBean() != null && getBean().getPossibleMetiers() != null) { + java.util.List<EffortDescription> effortDescriptions = new ArrayList<EffortDescription>(getBean().getPossibleMetiers()); + model.setEffortDescriptions(effortDescriptions); + } + fieldEffortDescriptionEffortDescriptionList.setModel(model); +} + + at Override +public void setActionButtons() { + getVerifier().setSaveButton(save); + getVerifier().setCancelButton(cancel); +} + +protected void effortDescriptionSelectionChanged() { + EffortDescriptionImpl selectedEffort = (EffortDescriptionImpl)fieldEffortDescriptionEffortDescriptionList.getSelectedValue(); + setEffortDescription(selectedEffort); + + if (getEffortDescription() != null) { + getVerifier().addCurrentEntity(getEffortDescription()); + + /* NumberEditor is not working + fieldEffortDescriptionFishingOperation.init(); + fieldEffortDescriptionGearsNumberPerOperation.init(); + fieldEffortDescriptionCrewSize.init(); + fieldEffortDescriptionUnitCostOfFishing.init(); + fieldEffortDescriptionFixedCrewSalary.init(); + fieldEffortDescriptionCrewFoodCost.init(); + fieldEffortDescriptionCrewShareRate.init(); + fieldEffortDescriptionRepairAndMaintenanceGearCost.init(); + fieldEffortDescriptionLandingCosts.init(); + fieldEffortDescriptionOtherRunningCost.init();*/ + } +} + ]]> + </script> + <Table> + <row> + <cell rows='3' fill='both' weightx='0.4' weighty='1.0'> + <JScrollPane> + <JList id="fieldEffortDescriptionEffortDescriptionList" selectionMode="{javax.swing.ListSelectionModel.SINGLE_SELECTION}" + onValueChanged='effortDescriptionSelectionChanged()' + cellRenderer='{new EffortDescriptionListRenderer()}' + enabled='{isActif()}' /> + </JScrollPane> + </cell> + <cell columns='2' fill='both' weightx='1.0'> + <Table border='{BorderFactory.createTitledBorder(_("isisfish.effortDescription.effortTitle"))}'> + <row> + <cell anchor='east'> + <JLabel text="isisfish.effortDescription.fishingOperation" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0'> + <!--NumberEditor id='fieldEffortDescriptionFishingOperation' constructorParams='this' + bean='{getEffortDescription()}' property='fishingOperation' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"FishingOperation"'/--> + <JFormattedTextField id="fieldEffortDescriptionFishingOperation" text='{getEffortDescription().getFishingOperation()}' + onKeyReleased='getEffortDescription().setFishingOperation(Integer.parseInt(fieldEffortDescriptionFishingOperation.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"FishingOperation"'/> + </cell> + </row> + <row> + <cell anchor='east'> + <JLabel text="isisfish.effortDescription.fishingOperationDuration" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0'> + <JTextField id="fieldEffortDescriptionFishingOperationDuration" + text='{getEffortDescription().getFishingOperationDuration() == null ? "" : getEffortDescription().getFishingOperationDuration().getHour()}' + toolTipText="isisfish.effortDescription.fishingOperationDuration.tooltip" onKeyReleased='getEffortDescription().setFishingOperationDuration(new TimeUnit(3600 * Double.parseDouble(fieldEffortDescriptionFishingOperationDuration.getText())))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"FishingOperationDuration"'/> + </cell> + </row> + <row> + <cell anchor='east'> + <JLabel text="isisfish.effortDescription.gearsNumberPerOperation" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0'> + <!--NumberEditor id='fieldEffortDescriptionGearsNumberPerOperation' constructorParams='this' + bean='{getEffortDescription()}' property='gearsNumberPerOperation' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"GearsNumberPerOperation"'/--> + <JTextField id="fieldEffortDescriptionGearsNumberPerOperation" text='{getEffortDescription().getGearsNumberPerOperation()}' + onKeyReleased='getEffortDescription().setGearsNumberPerOperation(Integer.parseInt(fieldEffortDescriptionGearsNumberPerOperation.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"GearsNumberPerOperation"'/> + </cell> + </row> + </Table> + </cell> + </row> + <row> + <cell columns='2' fill='both' weighty='1.0'> + <Table anchor='north' fill='both' weighty='1.0' border='{BorderFactory.createTitledBorder(_("isisfish.effortDescription.economicTitle"))}'> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.crewSize" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionCrewSize' constructorParams='this' + bean='{getEffortDescription()}' property='crewSize' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"CrewSize"'/--> + <JTextField id="fieldEffortDescriptionCrewSize" text='{getEffortDescription().getCrewSize()}' + onKeyReleased='getEffortDescription().setCrewSize(Integer.parseInt(fieldEffortDescriptionCrewSize.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"CrewSize"'/> + </cell> + </row> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.unitCostOfFishing" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionUnitCostOfFishing' constructorParams='this' + bean='{getEffortDescription()}' property='unitCostOfFishing' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"UnitCostOfFishing"'/--> + <JTextField id="fieldEffortDescriptionUnitCostOfFishing" text='{getEffortDescription().getUnitCostOfFishing()}' + onKeyReleased='getEffortDescription().setUnitCostOfFishing(Double.parseDouble(fieldEffortDescriptionUnitCostOfFishing.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"UnitCostOfFishing"'/> + </cell> + </row> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.fixedCrewSalary" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionFixedCrewSalary' constructorParams='this' + bean='{getEffortDescription()}' property='fixedCrewSalary' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"FixedCrewSalary"'/--> + <JTextField id="fieldEffortDescriptionFixedCrewSalary" text='{getEffortDescription().getFixedCrewSalary()}' + onKeyReleased='getEffortDescription().setFixedCrewSalary(Double.parseDouble(fieldEffortDescriptionFixedCrewSalary.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"FixedCrewSalary"'/> + </cell> + </row> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.crewFoodCost" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionCrewFoodCost' constructorParams='this' + bean='{getEffortDescription()}' property='crewFoodCost' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"CrewFoodCost"'/--> + <JTextField id="fieldEffortDescriptionCrewFoodCost" text='{getEffortDescription().getCrewFoodCost()}' + onKeyReleased='getEffortDescription().setCrewFoodCost(Double.parseDouble(fieldEffortDescriptionCrewFoodCost.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"CrewFoodCost"'/> + </cell> + </row> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.crewShareRate" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionCrewShareRate' constructorParams='this' + bean='{getEffortDescription()}' property='crewShareRate' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"CrewShareRate"'/--> + <JTextField id="fieldEffortDescriptionCrewShareRate" text='{getEffortDescription().getCrewShareRate()}' + onKeyReleased='getEffortDescription().setCrewShareRate(Double.parseDouble(fieldEffortDescriptionCrewShareRate.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"CrewShareRate"'/> + </cell> + </row> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.repairAndMaintenanceGearCost" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionRepairAndMaintenanceGearCost' constructorParams='this' + bean='{getEffortDescription()}' property='repairAndMaintenanceGearCost' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' + _method='"RepairAndMaintenanceGearCost"' useSign='true'/--> + <JTextField id="fieldEffortDescriptionRepairAndMaintenanceGearCost" text='{getEffortDescription().getRepairAndMaintenanceGearCost()}' + onKeyReleased='getEffortDescription().setRepairAndMaintenanceGearCost(Double.parseDouble(fieldEffortDescriptionRepairAndMaintenanceGearCost.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"RepairAndMaintenanceGearCost"'/> + </cell> + </row> + <row> + <cell anchor='east' fill='none' weighty='0.0'> + <JLabel text="isisfish.effortDescription.landingCosts" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0' weighty='0.0'> + <!--NumberEditor id='fieldEffortDescriptionLandingCosts' constructorParams='this' + bean='{getEffortDescription()}' property='landingCosts' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"LandingCosts"'/--> + <JTextField id="fieldEffortDescriptionLandingCosts" text='{getEffortDescription().getLandingCosts()}' + onKeyReleased='getEffortDescription().setLandingCosts(Double.parseDouble(fieldEffortDescriptionLandingCosts.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"LandingCosts"'/> + </cell> + </row> + <row> + <cell anchor='northeast' fill='none' weighty='1.0'> + <JLabel text="isisfish.effortDescription.otherRunningCost" enabled='{isActif()}'/> + </cell> + <cell anchor='north' fill='horizontal' weightx='1.0' weighty='1.0'> + <!--NumberEditor id='fieldEffortDescriptionOtherRunningCost' constructorParams='this' + bean='{getEffortDescription()}' property='otherRunningCost' + enabled='{isActif()}' decorator='boxed' useSign='true' + _bean='{EffortDescriptionImpl.class}' _method='"OtherRunningCost"'/--> + <JTextField id="fieldEffortDescriptionOtherRunningCost" text='{getEffortDescription().getOtherRunningCost()}' + onKeyReleased='getEffortDescription().setOtherRunningCost(Double.parseDouble(fieldEffortDescriptionOtherRunningCost.getText()))' + enabled='{isActif()}' decorator='boxed' _bean='{EffortDescriptionImpl.class}' _method='"OtherRunningCost"'/> + </cell> + </row> + </Table> + </cell> + </row> + <row> + <cell fill='horizontal' weightx='0.3'> + <JButton id='save' decorator='boxed'/> + </cell> + <cell fill='horizontal' weightx='0.3'> + <JButton id='cancel' decorator='boxed'/> + </cell> + </row> + </Table> +</fr.ifremer.isisfish.ui.input.InputContentUI> Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,1254 +0,0 @@ -/* *##% - * Copyright (C) 2005 - 2009 - * Ifremer, Code Lutin, Cedric 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ - -package fr.ifremer.isisfish.ui.input; - -import static fr.ifremer.isisfish.ui.simulator.filter.SimulationFilterUtil.selectSimulation; -import static javax.swing.JOptionPane.showInputDialog; -import static org.codelutin.i18n.I18n._; - -import java.awt.geom.Point2D; -import java.io.File; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; - -import jaxx.runtime.swing.ErrorDialogUI; - -import org.apache.commons.beanutils.MethodUtils; -import org.apache.commons.lang.ClassUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.math.matrix.MatrixFactory; -import org.codelutin.math.matrix.MatrixND; -import org.codelutin.topia.TopiaContext; -import org.codelutin.topia.TopiaException; -import org.codelutin.topia.persistence.TopiaDAO; -import org.codelutin.topia.persistence.TopiaEntity; -import org.codelutin.util.FileUtil; -import org.codelutin.widget.editor.Editor; - -import com.bbn.openmap.layer.shape.SpatialIndex; - -import fr.ifremer.isisfish.IsisFishDAOHelper; -import fr.ifremer.isisfish.datastore.FormuleStorage; -import fr.ifremer.isisfish.datastore.RegionStorage; -import fr.ifremer.isisfish.datastore.SimulationStorage; -import fr.ifremer.isisfish.datastore.StorageException; -import fr.ifremer.isisfish.datastore.update.ImportFromV2; -import fr.ifremer.isisfish.entities.Cell; -import fr.ifremer.isisfish.entities.CellDAO; -import fr.ifremer.isisfish.entities.EffortDescription; -import fr.ifremer.isisfish.entities.EffortDescriptionDAO; -import fr.ifremer.isisfish.entities.Equation; -import fr.ifremer.isisfish.entities.FisheryRegion; -import fr.ifremer.isisfish.entities.Formule; -import fr.ifremer.isisfish.entities.Gear; -import fr.ifremer.isisfish.entities.Metier; -import fr.ifremer.isisfish.entities.MetierSeasonInfo; -import fr.ifremer.isisfish.entities.MetierSeasonInfoDAO; -import fr.ifremer.isisfish.entities.Population; -import fr.ifremer.isisfish.entities.PopulationDAO; -import fr.ifremer.isisfish.entities.PopulationGroup; -import fr.ifremer.isisfish.entities.PopulationSeasonInfo; -import fr.ifremer.isisfish.entities.PopulationSeasonInfoDAO; -import fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl; -import fr.ifremer.isisfish.entities.Selectivity; -import fr.ifremer.isisfish.entities.SelectivityDAO; -import fr.ifremer.isisfish.entities.SetOfVessels; -import fr.ifremer.isisfish.entities.Species; -import fr.ifremer.isisfish.entities.SpeciesDAO; -import fr.ifremer.isisfish.entities.TargetSpecies; -import fr.ifremer.isisfish.entities.TargetSpeciesDAO; -import fr.ifremer.isisfish.entities.Zone; -import fr.ifremer.isisfish.types.Month; -import fr.ifremer.isisfish.ui.input.check.CheckRegion; -import fr.ifremer.isisfish.ui.input.check.CheckResult; -import fr.ifremer.isisfish.ui.input.check.CheckResultFrame; -import fr.ifremer.isisfish.util.CellPointcomparator; - -/** - * All code used in input UI. - * - * Created: 1 aout 2005 18:37:25 CEST - * - * @author Benjamin POUSSIN <poussin at codelutin.com> - * @version $Revision: 1312 $ - * - * Last update: $Date: 2008-08-28 10:21:07 +0200 (jeu, 28 aoû 2008) $ - * by : $Author: sletellier $ - */ -public class InputAction { - - /** Class logger. */ - private static Log log = LogFactory.getLog(InputAction.class); - - public InputAction() { - if (log.isDebugEnabled()) { - log.debug("new instance"); - } - } - - protected void showMsgBox(Exception eee) { - ErrorDialogUI.showError(eee); - } - - /** - * Exporter la region dans un zip - * - * @return TODO - */ - public File importRegion() { - File file = null; - try { - file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.region.zipped")); - if (file != null) { - RegionStorage.importZip(file); - } - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Can't import region", e); - } - showMsgBox(e); - } - return file; - } - - /** - * Exporter la region dans un zip - * - * @return TODO - */ - public File importRegionAndRename() { - File file = null; - try { - file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.region.zipped")); - if (file != null) { - - String newName = showInputDialog(_("isisfish.message.name.imported.region")); - RegionStorage.importAndRenameZip(file, newName); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't import region", eee); - } - showMsgBox(eee); - } - return file; - } - - /** - * Importer la region depuis un fichier XML de la version 2 - * - * @return TODO - */ - public File importV2Region() { - File file = null; - try { - file = FileUtil.getFile(".*.xml$", - _("isisfish.message.import.region.xml")); - if (file != null) { - - new ImportFromV2(true).importXML(file); - - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't import region", eee); - } - showMsgBox(eee); - } - return file; - } - - /** - * Extract from a simulation the region, and rename it with name given - * by user. - * - * @return msg - */ - public String importRegionFromSimulation() { - - // first step select a simulation and new region name - String simulationName; - try { - //TODO Should use a shared model ? - simulationName = selectSimulation(SimulationStorage - .getSimulationNames()); - if (simulationName == null) { - return null; - } - - } catch (Exception e) { - String msg = _("isisfish.error.no.select.simulation"); - if (log.isWarnEnabled()) { - log.warn(msg); - } - e.printStackTrace(); - showMsgBox(e); - return null; - } - - if (log.isInfoEnabled()) { - log.info("simulation used " + simulationName); - } - - // ask new region name - String regionName = showInputDialog( - _("isisfish.message.import.region.name"), "region from " - + simulationName); - if (regionName == null || "".equals(regionName)) { - return null; - } - if (RegionStorage.getRegionNames().contains(regionName)) { - return null; - } - - if (log.isInfoEnabled()) { - log.info("new region name " + regionName); - } - - try { - SimulationStorage.getSimulation(simulationName).extractRegion( - regionName); - } catch (StorageException e) { - if (log.isErrorEnabled()) { - log.error("Can't extract region", e); - } - showMsgBox(e); - } - return regionName; - } - - /** - * Exporter la region dans un zip - * - * @return TODO - */ - public File exportRegion(RegionStorage regionStorage) { - File file = null; - try { - file = FileUtil.getFile(".*.zip$", - _("isisfish.message.import.region.zipped")); - if (file != null) { - int resp = JOptionPane.YES_OPTION; - if (file.exists()) { - resp = JOptionPane.showConfirmDialog(null, - _("isisfish.message.file.overwrite")); - } - if (resp == JOptionPane.YES_OPTION) { - regionStorage.createZip(file); - } - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't export region", eee); - } - showMsgBox(eee); - } - return file; - } - - /** - * Copy la region avec un autre nom - * - * @return TODO - */ - public String copyRegion(RegionStorage regionStorage) { - String newName = null; - try { - newName = showInputDialog(_("isisfish.message.new.region.name")); - - File zip = regionStorage.createZip(); - RegionStorage.importAndRenameZip(zip, newName); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't copy region", eee); - } - showMsgBox(eee); - } - return newName; - } - - /** - * Remove region - * - * @param cvsDelete if true delete region in CVS too - * @return TODO - */ - public String removeRegion(RegionStorage regionStorage, boolean cvsDelete) { - String result = null; - try { - int resp = JOptionPane.showConfirmDialog(null, _( - "isisfish.message.confirm.remove.region", regionStorage - .getName())); - if (resp == JOptionPane.YES_OPTION) { - regionStorage.delete(cvsDelete); - result = _("isisfish.message.region.removed"); - - } else { - result = _("isisfish.message.region.remove.canceled"); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove region", eee); - } - showMsgBox(eee); - } - return result; - } - - /** - * Remove region - * - * @return TODO - */ - public String commitRegionInCVS(RegionStorage regionStorage) { - String result = null; - try { - String msg = regionStorage.getCommentForNextCommit(); - JTextArea text = new JTextArea(msg); - int resp = JOptionPane.showOptionDialog(null, - new JScrollPane(text), _("isisfish.commit.message"), - JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, - null, // icon - null, null); - if (resp == JOptionPane.OK_OPTION) { - regionStorage.commit(text.getText()); - regionStorage.clearCommentForNextCommit(); - result = _("isisfish.message.region.commited"); - } else { - result = _("isisfish.message.commit.region.canceled"); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't export region", eee); - } - showMsgBox(eee); - } - return result; - } - - /** - * load region. - * <p/> - * RegionStorage, TopiaContext, FisheryRegion are put in uiContext data. - * <p/> - * tree ans - * - * @param ui TODO - * @param name name of region - * @return loaded region - */ - public FisheryRegion loadRegion(jaxx.runtime.JAXXObject ui, String name) { - if (log.isDebugEnabled()) { - log.debug("loadRegion : " + name); - } - try { - RegionStorage regionStorage = null; - FisheryRegion fisheryRegion = null; - TopiaContext isisContext = null; - if (name != null && !" ".equals(name)) { - regionStorage = RegionStorage.getRegion(name); - isisContext = regionStorage.getStorage().beginTransaction(); - fisheryRegion = RegionStorage.getFisheryRegion(isisContext); - ui.setContextValue(regionStorage); - ui.setContextValue(isisContext); - return fisheryRegion; - // FIXME session shoul be closed - // but make lazy init later - //isisContext.rollbackTransaction(); - //isisContext.closeContext(); - } - return null; - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't load region", eee); - } - showMsgBox(eee); - } - return null; - } - - /** - * Create new region, and select it in combo, and show input pane region in - * input area. - * - * @param name name of the new region - */ - public void newRegion(String name) { - if (log.isTraceEnabled()) { - log.trace("newRegion called"); - } - try { - if ("".equals(name)) { - // showMsgBox("error " + _("isisfish.error.region.name.empty")); - } - if (RegionStorage.getRegionNames().contains(name)) { - // showMsgBox("Error " + _("isisfish.error.region.already.exists")); - } - RegionStorage.create(name); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create region", eee); - } - showMsgBox(eee); - } - } - - /** - * Permet de creer simplement un nouvelle objet portant un nom par defaut. - * Le nouvel element est automatiquement selectionné dans l'arbre - * - * @param type le type de l'entite a creer, le type est compose seulement du - * nom de l'entite et pas du package. - * @return null ou un fenetre d'erreur - */ - public TopiaEntity create(TopiaContext isisContext, String type) { - if (log.isTraceEnabled()) { - log.trace("create called for " + type); - } - try { - //TODO use the IsisFishEntityEnum for this purpose : - //TopiaDAO<TopiaEntity> dao = IsisFishEntityEnum.getEntry(type).getDAO(isisContext); - String name = type + "_new"; - - Method method = MethodUtils.getAccessibleMethod( - IsisFishDAOHelper.class, "get" + type + "DAO", - TopiaContext.class); - TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) method.invoke( - null, isisContext); - - TopiaEntity entity = dao.create("name", name); - entity.update(); - isisContext.commitTransaction(); - return entity; - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create entity", eee); - } - showMsgBox(eee); - } - return null; - } - - /** - * Save entity passed in argument, and commit - * - * @return the saved entity - */ - public TopiaEntity save(TopiaEntity selected) { - if (log.isTraceEnabled()) { - log.trace("save called"); - } - try { - if (selected == null) { - if (log.isWarnEnabled()) { - log.warn("Try to save null entity"); - } - return null; - } - // on est pas en autoUpdate donc il faut faire le update avant le - // commit - selected.update(); - - selected.getTopiaContext().commitTransaction(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't save region", eee); - } - showMsgBox(eee); - } - return selected; - } - - /** - * Cancel all modification on entity (rollback), and force reload it and - * refresh all ui component that name match 'type'Tab - * - * @return the roolbacked entity - */ - public TopiaEntity cancel(TopiaEntity selected) { - if (log.isTraceEnabled()) { - log.trace("cancel called"); - } - try { - TopiaContext isisContext = selected.getTopiaContext(); - isisContext.rollbackTransaction(); - - // reload the object - // can't be null here, or allready null before !!! - //if (selected != null) { - // FIXME don't modify parameters - selected = isisContext.findByTopiaId(selected.getTopiaId()); - //} - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't cancel modification in region", eee); - } - showMsgBox(eee); - } - return selected; - } - - /** - * Delete one entity and commit the change, try to selected intelligently - * other node in tree. - * <p/> - * Refresh all ui component where name match "input<entity type without - * package >.*" - * - * @return if ok return null else OutView error - */ - public String remove(TopiaEntity selected) { - if (log.isTraceEnabled()) { - log.trace("remove called"); - } - String msg = ""; - try { - boolean doDelete; - List<TopiaEntity> allWillBeRemoved = selected.getComposite(); - if (allWillBeRemoved.size() > 0) { - String text = _("isisfish.message.delete.object", selected - .toString()); - for (TopiaEntity e : allWillBeRemoved) { - text += ClassUtils.getShortClassName(e.getClass()) + " - " - + e.toString() + "\n"; - } - int resp = JOptionPane.showConfirmDialog(null, text, - _("isisfish.message.delete.entities"), - JOptionPane.YES_NO_OPTION); - doDelete = resp == JOptionPane.YES_OPTION; - } else { - String text = _("isisfish.message.confirm.delete.object", - selected.toString()); - int resp = JOptionPane.showConfirmDialog(null, text, - _("isisfish.message.delete.entity"), - JOptionPane.YES_NO_OPTION); - doDelete = resp == JOptionPane.YES_OPTION; - } - - if (doDelete) { - selected.delete(); - selected.getTopiaContext().commitTransaction(); - msg = _("isisfish.message.remove.finished"); - } else { - msg = _("isisfish.message.remove.canceled"); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove entity: " + selected, eee); - } - showMsgBox(eee); - } - return msg; - } - - /** - * Save an Equation as model, to reuse it for other equation - * - * @param eq equation to put in models - * @return if ok return null else OutputView error message - */ - public Object saveEquationAsModel(Equation eq) { - try { - if (eq != null) { - String name = showInputDialog(""); - /*if ("".equals(name)) { - showMsgBox("Error " +_("isisfish.error.invalid.equation.name")); - }*/ - if (name != null) { - FormuleStorage storage = FormuleStorage.createFormule(eq - .getCategory(), name, eq.getLanguage()); - storage.setContent(eq.getContent()); - } - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't save equation as model", eee); - } - showMsgBox(eee); - } - return null; - } - - /** - * Save an Equation as model, to reuse it for other equation - * - * @param category category for this equation - * @param language equation to put in models - * @param content content ? - * @return if ok return null else OutputView error message - */ - public Object saveAsModel(String category, String language, String content) { - try { - String name = showInputDialog("isisfish.message.saveModel.dialog"); - /*if ("".equals(name)) { - showMsgBox("Error " +_("isisfish.error.invalid.equation.name")); - }*/ - if (name != null) { - FormuleStorage storage = FormuleStorage.createFormule(category, - name, language); - storage.setContent(content); - } - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't save equation as model", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object openEditor(String category, String name, Class javaInterface, - String content, Editor editor) { - if (log.isTraceEnabled()) { - log.trace("openEditor"); - } - try { - EquationEditorPaneUI pane = new EquationEditorPaneUI(); - pane.setEquation(category, name, javaInterface, content); - pane.setVisible(true); - if (pane.isOk() && editor != null) { - editor.setText(pane.getEditor().getText()); - } - pane.dispose(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't open editor", eee); - } - showMsgBox(eee); - } - return null; - } - - protected List<Formule> getFormules(TopiaContext isisContext, String name) { - return FormuleStorage.getFormules(isisContext, name); - } - - // InputGear - - public Object addSelectivity(Population pop, String equation, Gear gear) { - try { - - SelectivityDAO dao = IsisFishDAOHelper.getSelectivityDAO(pop - .getTopiaContext()); - Selectivity selectivity = dao.create(); - - selectivity.setGear(gear); - selectivity.setPopulation(pop); - selectivity.getEquation().setContent(equation); - selectivity.update(); - - gear.addPopulationSelectivity(selectivity); - gear.update(); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't add selectivity", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object removeSelectivity(Gear gear, Selectivity selectivity) { - if (log.isTraceEnabled()) { - log.trace("removeTargetSpecies called: " + selectivity); - } - try { - if (gear != null && selectivity != null) { - gear.removePopulationSelectivity(selectivity); - } - } catch (Exception eee) { - log.error("Can't remove TargetSpecies", eee); - showMsgBox(eee); - } - return null; - } - - // InputMetier - - public Object createSeasonInfo(Metier metier) { - if (log.isTraceEnabled()) { - log.trace("createSeasonInfo called"); - } - try { - MetierSeasonInfoDAO metierSeasonInfoPS = IsisFishDAOHelper - .getMetierSeasonInfoDAO(metier.getTopiaContext()); - MetierSeasonInfo metierSeasonInfo = metierSeasonInfoPS.create(); - metierSeasonInfo.setFirstMonth(Month.MONTH[0]); - metierSeasonInfo.setLastMonth(Month.MONTH[3]); - metier.addMetierSeasonInfo(metierSeasonInfo); - metierSeasonInfo.update(); - metier.update(); - // isisContext.commitTransaction(); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create MetierSeasonInfo", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object removeSeasonInfo(Metier metier, MetierSeasonInfo info) { - if (log.isTraceEnabled()) { - log.trace("createSeasonInfo called"); - } - try { - metier.removeMetierSeasonInfo(info); - metier.update(); - metier.getTopiaContext().commitTransaction(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create MetierSeasonInfo", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object addTargetSpecies(Metier metier, MetierSeasonInfo m, - Species species, String targetFactorEquationContent, boolean primaryCatch) { - if (log.isDebugEnabled()) { - log.debug("addTargetSpecies called: " + metier + " " + species - + " " + primaryCatch + " " + targetFactorEquationContent); - } - try { - // build targetFactorEquation name - String targetFactorEquationName = metier.getName() + "-" + species.getName() - + "(" + m.getFirstMonth() + "-" + m.getLastMonth() + ")"; - - - TargetSpeciesDAO dao = IsisFishDAOHelper.getTargetSpeciesDAO(metier - .getTopiaContext()); - TargetSpecies targetSpecies = dao.create(); - - targetSpecies.setSpecies(species); - targetSpecies.getTargetFactorEquation().setName( - targetFactorEquationName); - targetSpecies.getTargetFactorEquation().setContent( - targetFactorEquationContent); - targetSpecies.setPrimaryCatch(primaryCatch); - m.addSpeciesTargetSpecies(targetSpecies); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't add TargetSpecies", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object removeTargetSpecies(MetierSeasonInfo m, - TargetSpecies targetSpecies) { - if (log.isDebugEnabled()) { - log.debug("removeTargetSpecies called: " + targetSpecies); - } - try { - if (targetSpecies != null) { - m.removeSpeciesTargetSpecies(targetSpecies); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove TargetSpecies", eee); - } - showMsgBox(eee); - } - return null; - } - - // SetOfVessels - - public void addEffortDescription(SetOfVessels setOfVessels, Metier metier) { - if (log.isDebugEnabled()) { - log.debug("addEffortDescription called: " + setOfVessels - + " metier: " + metier); - } - try { - EffortDescriptionDAO effortDescriptionPS = IsisFishDAOHelper - .getEffortDescriptionDAO(metier.getTopiaContext()); - EffortDescription effortDescription = effortDescriptionPS.create(); - effortDescription.setPossibleMetiers(metier); - effortDescription.update(); - setOfVessels.addPossibleMetiers(effortDescription); - setOfVessels.update(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create EffortDescription", eee); - } - showMsgBox(eee); - } - } - - public Object removeEffortDescription(SetOfVessels sov, - EffortDescription effort) { - if (log.isTraceEnabled()) { - log.trace("remove called"); - } - try { - sov.removePossibleMetiers(effort); - sov.getTopiaContext().commitTransaction(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove entity: " + effort, eee); - } - showMsgBox(eee); - } - return null; - } - - // Population - public Species getSpeciesByTopiaId(TopiaContext context, String topiaId) { - Species result = null; - try { - SpeciesDAO dao = IsisFishDAOHelper.getSpeciesDAO(context); - result = dao.findByTopiaId(topiaId); - } catch (TopiaException e) { - if (log.isErrorEnabled()) { - log.error("Can't get species", e); - } - } - return result; - } - - public Population createPopulation(TopiaContext context, Species species) { - if (log.isTraceEnabled()) { - log.trace("create called"); - } - try { - String name = "Population_new"; - - PopulationDAO dao = IsisFishDAOHelper.getPopulationDAO(context); - Population pop = dao.create(); - pop.setName(name); - - species.addPopulation(pop); - pop.setSpecies(species); - species.update(); - pop.update(); - context.commitTransaction(); - return pop; - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create Population", eee); - } - showMsgBox(eee); - } - return null; - } - - public PopulationSeasonInfo createPopulationSeasonInfo(Population pop) { - if (log.isDebugEnabled()) { - log.debug("createSeasonInfo called"); - } - PopulationSeasonInfo seasonInfo = null; - try { - PopulationSeasonInfoDAO dao = IsisFishDAOHelper - .getPopulationSeasonInfoDAO(pop.getTopiaContext()); - seasonInfo = dao.create(); - seasonInfo.setFirstMonth(Month.MONTH[0]); - seasonInfo.setLastMonth(Month.MONTH[3]); - pop.addPopulationSeasonInfo(seasonInfo); - seasonInfo.setPopulation(pop); - - // EC-20090710 ajout du code d'initailisation - // d'un populationseasoninfo - // il a du se perdre au changement d'interface - // swiat>jaxx - seasonInfo.setSimpleLengthChangeMatrix(true); - MatrixND matrix = ((PopulationSeasonInfoImpl)seasonInfo).createNoSpacializedChangeGroupMatrix(); - seasonInfo.setLengthChangeMatrix(matrix); - - seasonInfo.update(); - pop.update(); - // isisContext.commitTransaction(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create PopulationSeasonInfo", eee); - } - showMsgBox(eee); - } - return seasonInfo; - } - - public void removePopulationSeasonInfo(Population pop, - PopulationSeasonInfo populationSeasonInfo) { - if (log.isDebugEnabled()) { - log.debug("removeSeasonInfo called"); - } - try { - pop.removePopulationSeasonInfo(populationSeasonInfo); - pop.update(); - pop.getTopiaContext().commitTransaction(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove PopulationSeasonInfo", eee); - } - showMsgBox(eee); - } - } - - public void createMetierSeasonInfo(Metier metier) { - if (log.isDebugEnabled()) { - log.debug("createSeasonInfo called"); - } - try { - MetierSeasonInfoDAO metierSeasonInfoPS = IsisFishDAOHelper - .getMetierSeasonInfoDAO(metier.getTopiaContext()); - MetierSeasonInfo metierSeasonInfo = metierSeasonInfoPS.create(); - metierSeasonInfo.setFirstMonth(Month.MONTH[0]); - metierSeasonInfo.setLastMonth(Month.MONTH[3]); - metier.addMetierSeasonInfo(metierSeasonInfo); - metierSeasonInfo.update(); - metier.update(); - // isisContext.commitTransaction(); - } catch (Exception eee) { - log.error("Can't create MetierSeasonInfo", eee); - showMsgBox(eee); - } - } - - public void removeMetierSeasonInfo(Metier metier, MetierSeasonInfo info) { - if (log.isDebugEnabled()) { - log.debug("createSeasonInfo called"); - } - try { - metier.removeMetierSeasonInfo(info); - metier.update(); - metier.getTopiaContext().commitTransaction(); - - } catch (Exception eee) { - log.error("Can't create MetierSeasonInfo", eee); - showMsgBox(eee); - } - } - - public Object createRecruitmentDistribution(Population pop) { - if (log.isTraceEnabled()) { - log.trace("createRecruitmentDistributionontext called: " + pop); - } - try { - String val = JOptionPane - .showInputDialog(_("isisfish.message.recruitment.number.month")); - int num = -1; - if (val != null && !"".equals(val)) { - try { - num = Integer.parseInt(val); - } catch (RuntimeException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't parse val: " + val, eee); - } - } - } - - if (num > 0) { - List<String> sem = new ArrayList<String>(num); - for (int i = 0; i < num; i++) { - sem.add(_("isisfish.common.month", i)); - } - MatrixND newMat = MatrixFactory.getInstance().create( - new List[] { sem }); - - MatrixND mat = pop.getRecruitmentDistribution(); - if (mat != null) { - newMat.paste(mat); - } - pop.setRecruitmentDistribution(newMat); - pop.update(); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove PopulationSeasonInfo", eee); - } - showMsgBox(eee); - } - return null; - } - - // Migration - - public Object addMigration(PopulationSeasonInfo info, - PopulationGroup group, Zone departure, Zone arrival, double coeff) { - if (log.isTraceEnabled()) { - log.trace("addMigration called"); - } - try { - MatrixND mat = info.getMigrationMatrix().copy(); - mat.setValue(group, departure, arrival, coeff); - info.setMigrationMatrix(mat); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't add migration", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object addEmigration(PopulationSeasonInfo info, - PopulationGroup group, Zone departure, double coeff) { - if (log.isTraceEnabled()) { - log.trace("addEmigration called"); - } - try { - MatrixND mat = info.getEmigrationMatrix().copy(); - mat.setValue(group, departure, coeff); - info.setEmigrationMatrix(mat); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't add emigration", eee); - } - showMsgBox(eee); - } - return null; - } - - public Object addImmigration(PopulationSeasonInfo info, - PopulationGroup group, Zone arrival, double coeff) { - if (log.isTraceEnabled()) { - log.trace("addImmigration called"); - } - try { - MatrixND mat = info.getImmigrationMatrix().copy(); - mat.setValue(group, arrival, coeff); - info.setImmigrationMatrix(mat); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't add immigration", eee); - } - showMsgBox(eee); - } - return null; - } - - // FisheryRegion - /** @return TODO */ - public Object addMap(FisheryRegion fisheryRegion) { - if (log.isTraceEnabled()) { - log.trace("AddMap called"); - } - - File shp = FileUtil.getFile(".*\\.shp", "shp file"); - try { - if (shp != null) { - // copy shp and ssx to region map directory - String basename = FileUtil.basename(shp, ".shp"); - - String srcMap = shp.getPath(); - srcMap = srcMap.substring(0, srcMap.length() - ".shp".length()); - File ssx = new File(srcMap + ".ssx"); - - RegionStorage regionStorage = RegionStorage - .getRegion(fisheryRegion.getName()); - File destDir = regionStorage.getMapRepository(); - - // copy shp file - File destShp = new File(destDir, basename + ".shp"); - FileUtil.copy(shp, destShp); - - // copy ssx file - File destSsx = new File(destDir, basename + ".ssx"); - if (ssx.exists()) { - FileUtil.copy(ssx, destSsx); - } else { - if (log.isInfoEnabled()) { - log.info("Ssx file don't exist, try to generate it"); - } - SpatialIndex.createIndex(destShp.getPath(), destSsx.getPath()); - } - - List<String> maps = fisheryRegion.getMapFileList(); - maps.add(basename); - fisheryRegion.setMapFileList(maps); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't copy .shp or .ssx file for: " + shp, eee); - } - showMsgBox(eee); - } - return null; - } - - /** - * @param selectedMaps la list dans lequel il faut retirer la carte - * @return TODO - */ - public Object removeMap(FisheryRegion fisheryRegion, Object[] selectedMaps) { - if (log.isTraceEnabled()) { - log.trace("removeMap called"); - } - try { - - List<String> maps = fisheryRegion.getMapFileList(); - - RegionStorage regionStorage = RegionStorage.getRegion(fisheryRegion - .getName()); - File mapDir = regionStorage.getMapRepository(); - - for (Object map : selectedMaps) { - maps.remove(map); - // remove on disk too, if possible - File shp = new File(mapDir, map + ".shp"); - shp.delete(); - File ssx = new File(mapDir, map + ".ssx"); - ssx.delete(); - } - - fisheryRegion.setMapFileList(maps); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove map", eee); - } - showMsgBox(eee); - } - return null; - } - - /** - * Affiche une boite de dialogue demandant a l'utilisateur de rentrer - * un nom de fichier, et met ce nom dans la textField. - * Passe le saveButton en enabled pour marque que la region a ete modifié - * - * @param cellFile file of cells - */ - public void loadCellFile(String cellFile) { - if (log.isTraceEnabled()) { - log.trace("loadCell called"); - } - // FIXME todo loadCellFile - } - - public void saveFisheryRegion(FisheryRegion fisheryRegion) { - if (log.isTraceEnabled()) { - log.trace("save called"); - } - try { - TopiaContext isisContext = fisheryRegion.getTopiaContext(); - - // frame.setInfoText(_("isisfish.message.checking.cell")); - int latNumber = (int) Math - .round((fisheryRegion.getMaxLatitude() - fisheryRegion - .getMinLatitude()) - / fisheryRegion.getCellLengthLatitude()); - int lonNumber = (int) Math - .round((fisheryRegion.getMaxLongitude() - fisheryRegion - .getMinLongitude()) - / fisheryRegion.getCellLengthLongitude()); - - // frame.setProgressMin(0); - // frame.setProgressMax(latNumber * lonNumber); - int progresscpt = 0; - - // il faut peut-etre creer ou supprimer des mailles - CellPointcomparator cellPointcomparator = new CellPointcomparator(); - CellDAO cellPS = IsisFishDAOHelper.getCellDAO(isisContext); - List<Cell> cells = cellPS.findAll(); - Collections.sort(cells, cellPointcomparator); - Point2D.Float point = new Point2D.Float(); - - for (float lati = fisheryRegion.getMinLatitude(); lati < fisheryRegion - .getMaxLatitude(); lati += fisheryRegion - .getCellLengthLatitude()) { - lati = Math.round(lati * 1000f); - lati = lati / 1000.0f; - for (float longi = fisheryRegion.getMinLongitude(); longi < fisheryRegion - .getMaxLongitude(); longi += fisheryRegion - .getCellLengthLongitude()) { - longi = Math.round(longi * 1000f) / 1000.0f; - point.setLocation(lati, longi); - int position = Collections.binarySearch(cells, point, - cellPointcomparator); - if (position >= 0) { - // deja existant on l'enleve de la liste, et on ne cree rien - cells.remove(position); - } else { - // n'existe pas on la cree - Cell cell = cellPS.create(); - cell.setName("La" + lati + "Lo" + longi); - cell.setLatitude(lati); - cell.setLongitude(longi); - cell.setLand(false); - cell.update(); - } - // frame.setProgressValue(++progresscpt); - } - } - - // on est pas en autoUpdate donc il faut faire le update avant le commit - fisheryRegion.update(); - - // toutes les mailles restantes dans la liste sont des mailles en trop - // on les supprimes - - progresscpt = 0; - for (Cell cell : cells) { - // FIXME il faudrait aussi rechercher les objets dependants - // des mailles que l'on va supprimer et demander confirmation - // a l'utilisateur qu'il souhaite reellement supprimer tous - // ces objets. Si ce n'est pas le cas, on sort tout de suite - // avant le commit - cellPS.delete(cell); - } - isisContext.commitTransaction(); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("isisfish.error.save.region"), eee); - } - showMsgBox(eee); - } - } - - public Object checkFisheryRegion(FisheryRegion fisheryRegion) { - try { - if (log.isTraceEnabled()) { - log.trace("check called: "); - } - // frame.setInfoText(_("isisfish.message.check.region")); - CheckResult result = new CheckResult(); - CheckRegion.check(fisheryRegion, result); - CheckResultFrame dialog = new CheckResultFrame(); - dialog.setCheckResult(result); - dialog.setVisible(true); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error(_("isisfish.error.check.region"), eee); - } - showMsgBox(eee); - } - return null; - } -} Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java (from rev 2480, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputAction.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,1258 @@ +/* *##% + * Copyright (C) 2005 - 2009 + * Ifremer, Code Lutin, Cedric 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.input; + +import static fr.ifremer.isisfish.ui.simulator.filter.SimulationFilterUtil.selectSimulation; +import static javax.swing.JOptionPane.showInputDialog; +import static org.codelutin.i18n.I18n._; + +import java.awt.geom.Point2D; +import java.io.File; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; + +import jaxx.runtime.swing.ErrorDialogUI; + +import org.apache.commons.beanutils.MethodUtils; +import org.apache.commons.lang.ClassUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.math.matrix.MatrixFactory; +import org.codelutin.math.matrix.MatrixND; +import org.codelutin.topia.TopiaContext; +import org.codelutin.topia.TopiaException; +import org.codelutin.topia.persistence.TopiaDAO; +import org.codelutin.topia.persistence.TopiaEntity; +import org.codelutin.util.FileUtil; +import org.codelutin.widget.editor.Editor; + +import com.bbn.openmap.layer.shape.SpatialIndex; + +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.datastore.FormuleStorage; +import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.StorageException; +import fr.ifremer.isisfish.datastore.update.ImportFromV2; +import fr.ifremer.isisfish.entities.Cell; +import fr.ifremer.isisfish.entities.CellDAO; +import fr.ifremer.isisfish.entities.EffortDescription; +import fr.ifremer.isisfish.entities.EffortDescriptionDAO; +import fr.ifremer.isisfish.entities.Equation; +import fr.ifremer.isisfish.entities.FisheryRegion; +import fr.ifremer.isisfish.entities.Formule; +import fr.ifremer.isisfish.entities.Gear; +import fr.ifremer.isisfish.entities.Metier; +import fr.ifremer.isisfish.entities.MetierSeasonInfo; +import fr.ifremer.isisfish.entities.MetierSeasonInfoDAO; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.entities.PopulationDAO; +import fr.ifremer.isisfish.entities.PopulationGroup; +import fr.ifremer.isisfish.entities.PopulationSeasonInfo; +import fr.ifremer.isisfish.entities.PopulationSeasonInfoDAO; +import fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl; +import fr.ifremer.isisfish.entities.Selectivity; +import fr.ifremer.isisfish.entities.SelectivityDAO; +import fr.ifremer.isisfish.entities.SetOfVessels; +import fr.ifremer.isisfish.entities.Species; +import fr.ifremer.isisfish.entities.SpeciesDAO; +import fr.ifremer.isisfish.entities.TargetSpecies; +import fr.ifremer.isisfish.entities.TargetSpeciesDAO; +import fr.ifremer.isisfish.entities.Zone; +import fr.ifremer.isisfish.types.Month; +import fr.ifremer.isisfish.ui.input.check.CheckRegion; +import fr.ifremer.isisfish.ui.input.check.CheckResult; +import fr.ifremer.isisfish.ui.input.check.CheckResultFrame; +import fr.ifremer.isisfish.util.CellPointcomparator; + +/** + * All code used in input UI. + * + * Created: 1 aout 2005 18:37:25 CEST + * + * @author Benjamin POUSSIN <poussin at codelutin.com> + * @version $Revision: 1312 $ + * + * Last update: $Date: 2008-08-28 10:21:07 +0200 (jeu, 28 aoû 2008) $ + * by : $Author: sletellier $ + */ +public class InputAction { + + /** Class logger. */ + private static Log log = LogFactory.getLog(InputAction.class); + + public InputAction() { + if (log.isDebugEnabled()) { + log.debug("new instance"); + } + } + + protected void showMsgBox(Exception eee) { + ErrorDialogUI.showError(eee); + } + + /** + * Exporter la region dans un zip + * + * @return TODO + */ + public File importRegion() { + File file = null; + try { + file = FileUtil.getFile(".*.zip$", + _("isisfish.message.import.region.zipped")); + if (file != null) { + RegionStorage.importZip(file); + } + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Can't import region", e); + } + showMsgBox(e); + } + return file; + } + + /** + * Exporter la region dans un zip + * + * @return TODO + */ + public File importRegionAndRename() { + File file = null; + try { + file = FileUtil.getFile(".*.zip$", + _("isisfish.message.import.region.zipped")); + if (file != null) { + + String newName = showInputDialog(_("isisfish.message.name.imported.region")); + RegionStorage.importAndRenameZip(file, newName); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't import region", eee); + } + showMsgBox(eee); + } + return file; + } + + /** + * Importer la region depuis un fichier XML de la version 2 + * + * @return TODO + */ + public File importV2Region() { + File file = null; + try { + file = FileUtil.getFile(".*.xml$", + _("isisfish.message.import.region.xml")); + if (file != null) { + + new ImportFromV2(true).importXML(file); + + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't import region", eee); + } + showMsgBox(eee); + } + return file; + } + + /** + * Extract from a simulation the region, and rename it with name given + * by user. + * + * @return msg + */ + public String importRegionFromSimulation() { + + // first step select a simulation and new region name + String simulationName; + try { + //TODO Should use a shared model ? + simulationName = selectSimulation(SimulationStorage + .getSimulationNames()); + if (simulationName == null) { + return null; + } + + } catch (Exception e) { + String msg = _("isisfish.error.no.select.simulation"); + if (log.isWarnEnabled()) { + log.warn(msg); + } + e.printStackTrace(); + showMsgBox(e); + return null; + } + + if (log.isInfoEnabled()) { + log.info("simulation used " + simulationName); + } + + // ask new region name + String regionName = showInputDialog( + _("isisfish.message.import.region.name"), "region from " + + simulationName); + if (regionName == null || "".equals(regionName)) { + return null; + } + if (RegionStorage.getRegionNames().contains(regionName)) { + return null; + } + + if (log.isInfoEnabled()) { + log.info("new region name " + regionName); + } + + try { + SimulationStorage.getSimulation(simulationName).extractRegion( + regionName); + } catch (StorageException e) { + if (log.isErrorEnabled()) { + log.error("Can't extract region", e); + } + showMsgBox(e); + } + return regionName; + } + + /** + * Exporter la region dans un zip + * + * @return TODO + */ + public File exportRegion(RegionStorage regionStorage) { + File file = null; + try { + file = FileUtil.getFile(".*.zip$", + _("isisfish.message.import.region.zipped")); + if (file != null) { + int resp = JOptionPane.YES_OPTION; + if (file.exists()) { + resp = JOptionPane.showConfirmDialog(null, + _("isisfish.message.file.overwrite")); + } + if (resp == JOptionPane.YES_OPTION) { + regionStorage.createZip(file); + } + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't export region", eee); + } + showMsgBox(eee); + } + return file; + } + + /** + * Copy la region avec un autre nom + * + * @return TODO + */ + public String copyRegion(RegionStorage regionStorage) { + String newName = null; + try { + newName = showInputDialog(_("isisfish.message.new.region.name")); + + File zip = regionStorage.createZip(); + RegionStorage.importAndRenameZip(zip, newName); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't copy region", eee); + } + showMsgBox(eee); + } + return newName; + } + + /** + * Remove region + * + * @param cvsDelete if true delete region in CVS too + * @return TODO + */ + public String removeRegion(RegionStorage regionStorage, boolean cvsDelete) { + String result = null; + try { + int resp = JOptionPane.showConfirmDialog(null, _( + "isisfish.message.confirm.remove.region", regionStorage + .getName())); + if (resp == JOptionPane.YES_OPTION) { + regionStorage.delete(cvsDelete); + result = _("isisfish.message.region.removed"); + + } else { + result = _("isisfish.message.region.remove.canceled"); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove region", eee); + } + showMsgBox(eee); + } + return result; + } + + /** + * Remove region + * + * @return TODO + */ + public String commitRegionInCVS(RegionStorage regionStorage) { + String result = null; + try { + String msg = regionStorage.getCommentForNextCommit(); + JTextArea text = new JTextArea(msg); + int resp = JOptionPane.showOptionDialog(null, + new JScrollPane(text), _("isisfish.commit.message"), + JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, + null, // icon + null, null); + if (resp == JOptionPane.OK_OPTION) { + regionStorage.commit(text.getText()); + regionStorage.clearCommentForNextCommit(); + result = _("isisfish.message.region.commited"); + } else { + result = _("isisfish.message.commit.region.canceled"); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't export region", eee); + } + showMsgBox(eee); + } + return result; + } + + /** + * load region. + * <p/> + * RegionStorage, TopiaContext, FisheryRegion are put in uiContext data. + * <p/> + * tree ans + * + * @param ui TODO + * @param name name of region + * @return loaded region + */ + public FisheryRegion loadRegion(jaxx.runtime.JAXXObject ui, String name) { + if (log.isDebugEnabled()) { + log.debug("loadRegion : " + name); + } + try { + RegionStorage regionStorage = null; + FisheryRegion fisheryRegion = null; + TopiaContext isisContext = null; + if (name != null && !" ".equals(name)) { + regionStorage = RegionStorage.getRegion(name); + isisContext = regionStorage.getStorage().beginTransaction(); + fisheryRegion = RegionStorage.getFisheryRegion(isisContext); + ui.setContextValue(regionStorage); + ui.setContextValue(isisContext); + return fisheryRegion; + // FIXME session shoul be closed + // but make lazy init later + //isisContext.rollbackTransaction(); + //isisContext.closeContext(); + } + return null; + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't load region", eee); + } + showMsgBox(eee); + } + return null; + } + + /** + * Create new region, and select it in combo, and show input pane region in + * input area. + * + * @param name name of the new region + */ + public void newRegion(String name) { + if (log.isTraceEnabled()) { + log.trace("newRegion called"); + } + try { + if ("".equals(name)) { + // showMsgBox("error " + _("isisfish.error.region.name.empty")); + } + if (RegionStorage.getRegionNames().contains(name)) { + // showMsgBox("Error " + _("isisfish.error.region.already.exists")); + } + RegionStorage.create(name); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create region", eee); + } + showMsgBox(eee); + } + } + + /** + * Permet de creer simplement un nouvelle objet portant un nom par defaut. + * Le nouvel element est automatiquement selectionné dans l'arbre + * + * @param type le type de l'entite a creer, le type est compose seulement du + * nom de l'entite et pas du package. + * @return null ou un fenetre d'erreur + */ + public TopiaEntity create(TopiaContext isisContext, String type) { + if (log.isTraceEnabled()) { + log.trace("create called for " + type); + } + try { + //TODO use the IsisFishEntityEnum for this purpose : + //TopiaDAO<TopiaEntity> dao = IsisFishEntityEnum.getEntry(type).getDAO(isisContext); + String name = type + "_new"; + + Method method = MethodUtils.getAccessibleMethod( + IsisFishDAOHelper.class, "get" + type + "DAO", + TopiaContext.class); + TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) method.invoke( + null, isisContext); + + TopiaEntity entity = dao.create("name", name); + entity.update(); + isisContext.commitTransaction(); + return entity; + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create entity", eee); + } + showMsgBox(eee); + } + return null; + } + + /** + * Save entity passed in argument, and commit + * + * @return the saved entity + */ + public TopiaEntity save(TopiaEntity selected) { + if (log.isTraceEnabled()) { + log.trace("save called"); + } + try { + if (selected == null) { + if (log.isWarnEnabled()) { + log.warn("Try to save null entity"); + } + return null; + } + // on est pas en autoUpdate donc il faut faire le update avant le + // commit + selected.update(); + + selected.getTopiaContext().commitTransaction(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't save region", eee); + } + showMsgBox(eee); + } + return selected; + } + + /** + * Cancel all modification on entity (rollback), and force reload it and + * refresh all ui component that name match 'type'Tab + * + * @return the roolbacked entity + */ + public TopiaEntity cancel(TopiaEntity selected) { + if (log.isTraceEnabled()) { + log.trace("cancel called"); + } + try { + TopiaContext isisContext = selected.getTopiaContext(); + isisContext.rollbackTransaction(); + + // reload the object + // can't be null here, or allready null before !!! + //if (selected != null) { + // FIXME don't modify parameters + selected = isisContext.findByTopiaId(selected.getTopiaId()); + //} + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't cancel modification in region", eee); + } + showMsgBox(eee); + } + return selected; + } + + /** + * Delete one entity and commit the change, try to selected intelligently + * other node in tree. + * <p/> + * Refresh all ui component where name match "input<entity type without + * package >.*" + * + * @return if ok return null else OutView error + */ + public String remove(TopiaEntity selected) { + if (log.isTraceEnabled()) { + log.trace("remove called"); + } + String msg = ""; + try { + boolean doDelete; + List<TopiaEntity> allWillBeRemoved = selected.getComposite(); + if (allWillBeRemoved.size() > 0) { + String text = _("isisfish.message.delete.object", selected + .toString()); + for (TopiaEntity e : allWillBeRemoved) { + text += ClassUtils.getShortClassName(e.getClass()) + " - " + + e.toString() + "\n"; + } + int resp = JOptionPane.showConfirmDialog(null, text, + _("isisfish.message.delete.entities"), + JOptionPane.YES_NO_OPTION); + doDelete = resp == JOptionPane.YES_OPTION; + } else { + String text = _("isisfish.message.confirm.delete.object", + selected.toString()); + int resp = JOptionPane.showConfirmDialog(null, text, + _("isisfish.message.delete.entity"), + JOptionPane.YES_NO_OPTION); + doDelete = resp == JOptionPane.YES_OPTION; + } + + if (doDelete) { + selected.delete(); + selected.getTopiaContext().commitTransaction(); + msg = _("isisfish.message.remove.finished"); + } else { + msg = _("isisfish.message.remove.canceled"); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove entity: " + selected, eee); + } + showMsgBox(eee); + } + return msg; + } + + /** + * Save an Equation as model, to reuse it for other equation + * + * @param eq equation to put in models + * @return if ok return null else OutputView error message + */ + public Object saveEquationAsModel(Equation eq) { + try { + if (eq != null) { + String name = showInputDialog(""); + /*if ("".equals(name)) { + showMsgBox("Error " +_("isisfish.error.invalid.equation.name")); + }*/ + if (name != null) { + FormuleStorage storage = FormuleStorage.createFormule(eq + .getCategory(), name, eq.getLanguage()); + storage.setContent(eq.getContent()); + } + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't save equation as model", eee); + } + showMsgBox(eee); + } + return null; + } + + /** + * Save an Equation as model, to reuse it for other equation + * + * @param category category for this equation + * @param language equation to put in models + * @param content content ? + * @return if ok return null else OutputView error message + */ + public Object saveAsModel(String category, String language, String content) { + try { + String name = showInputDialog("isisfish.message.saveModel.dialog"); + /*if ("".equals(name)) { + showMsgBox("Error " +_("isisfish.error.invalid.equation.name")); + }*/ + if (name != null) { + FormuleStorage storage = FormuleStorage.createFormule(category, + name, language); + storage.setContent(content); + } + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't save equation as model", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object openEditor(String category, String name, Class javaInterface, + String content, Editor editor) { + if (log.isTraceEnabled()) { + log.trace("openEditor"); + } + try { + EquationEditorPaneUI pane = new EquationEditorPaneUI(); + pane.setEquation(category, name, javaInterface, content); + pane.setVisible(true); + if (pane.isOk() && editor != null) { + editor.setText(pane.getEditor().getText()); + } + pane.dispose(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't open editor", eee); + } + showMsgBox(eee); + } + return null; + } + + protected List<Formule> getFormules(TopiaContext isisContext, String name) { + return FormuleStorage.getFormules(isisContext, name); + } + + // InputGear + + public Object addSelectivity(Population pop, String equation, Gear gear) { + try { + + SelectivityDAO dao = IsisFishDAOHelper.getSelectivityDAO(pop + .getTopiaContext()); + Selectivity selectivity = dao.create(); + + selectivity.setGear(gear); + selectivity.setPopulation(pop); + selectivity.getEquation().setContent(equation); + selectivity.update(); + + gear.addPopulationSelectivity(selectivity); + gear.update(); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't add selectivity", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object removeSelectivity(Gear gear, Selectivity selectivity) { + if (log.isTraceEnabled()) { + log.trace("removeTargetSpecies called: " + selectivity); + } + try { + if (gear != null && selectivity != null) { + gear.removePopulationSelectivity(selectivity); + } + } catch (Exception eee) { + log.error("Can't remove TargetSpecies", eee); + showMsgBox(eee); + } + return null; + } + + // InputMetier + + public Object createSeasonInfo(Metier metier) { + if (log.isTraceEnabled()) { + log.trace("createSeasonInfo called"); + } + try { + MetierSeasonInfoDAO metierSeasonInfoPS = IsisFishDAOHelper + .getMetierSeasonInfoDAO(metier.getTopiaContext()); + MetierSeasonInfo metierSeasonInfo = metierSeasonInfoPS.create(); + metierSeasonInfo.setFirstMonth(Month.MONTH[0]); + metierSeasonInfo.setLastMonth(Month.MONTH[3]); + metier.addMetierSeasonInfo(metierSeasonInfo); + metierSeasonInfo.update(); + metier.update(); + // isisContext.commitTransaction(); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create MetierSeasonInfo", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object removeSeasonInfo(Metier metier, MetierSeasonInfo info) { + if (log.isTraceEnabled()) { + log.trace("createSeasonInfo called"); + } + try { + metier.removeMetierSeasonInfo(info); + metier.update(); + metier.getTopiaContext().commitTransaction(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create MetierSeasonInfo", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object addTargetSpecies(Metier metier, MetierSeasonInfo m, + Species species, String targetFactorEquationContent, boolean primaryCatch) { + if (log.isDebugEnabled()) { + log.debug("addTargetSpecies called: " + metier + " " + species + + " " + primaryCatch + " " + targetFactorEquationContent); + } + try { + // build targetFactorEquation name + String targetFactorEquationName = metier.getName() + "-" + species.getName() + + "(" + m.getFirstMonth() + "-" + m.getLastMonth() + ")"; + + + TargetSpeciesDAO dao = IsisFishDAOHelper.getTargetSpeciesDAO(metier + .getTopiaContext()); + TargetSpecies targetSpecies = dao.create(); + + targetSpecies.setSpecies(species); + targetSpecies.getTargetFactorEquation().setName( + targetFactorEquationName); + targetSpecies.getTargetFactorEquation().setContent( + targetFactorEquationContent); + targetSpecies.setPrimaryCatch(primaryCatch); + m.addSpeciesTargetSpecies(targetSpecies); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't add TargetSpecies", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object removeTargetSpecies(MetierSeasonInfo m, + TargetSpecies targetSpecies) { + if (log.isDebugEnabled()) { + log.debug("removeTargetSpecies called: " + targetSpecies); + } + try { + if (targetSpecies != null) { + m.removeSpeciesTargetSpecies(targetSpecies); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove TargetSpecies", eee); + } + showMsgBox(eee); + } + return null; + } + + // SetOfVessels + + public void addEffortDescription(SetOfVessels setOfVessels, Metier metier) { + if (log.isDebugEnabled()) { + log.debug("addEffortDescription called: " + setOfVessels + + " metier: " + metier); + } + try { + EffortDescriptionDAO effortDescriptionPS = IsisFishDAOHelper + .getEffortDescriptionDAO(metier.getTopiaContext()); + EffortDescription effortDescription = effortDescriptionPS.create(); + // EC20090715 : c'est la classe d'association + // qui en étant sauvee, sauve les relations en base + // il faut bien faire les set des deux cotes + effortDescription.setSetOfVessels(setOfVessels); + effortDescription.setPossibleMetiers(metier); + effortDescription.update(); + setOfVessels.addPossibleMetiers(effortDescription); + setOfVessels.update(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create EffortDescription", eee); + } + showMsgBox(eee); + } + } + + public Object removeEffortDescription(SetOfVessels sov, + EffortDescription effort) { + if (log.isTraceEnabled()) { + log.trace("remove called"); + } + try { + sov.removePossibleMetiers(effort); + sov.getTopiaContext().commitTransaction(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove entity: " + effort, eee); + } + showMsgBox(eee); + } + return null; + } + + // Population + public Species getSpeciesByTopiaId(TopiaContext context, String topiaId) { + Species result = null; + try { + SpeciesDAO dao = IsisFishDAOHelper.getSpeciesDAO(context); + result = dao.findByTopiaId(topiaId); + } catch (TopiaException e) { + if (log.isErrorEnabled()) { + log.error("Can't get species", e); + } + } + return result; + } + + public Population createPopulation(TopiaContext context, Species species) { + if (log.isTraceEnabled()) { + log.trace("create called"); + } + try { + String name = "Population_new"; + + PopulationDAO dao = IsisFishDAOHelper.getPopulationDAO(context); + Population pop = dao.create(); + pop.setName(name); + + species.addPopulation(pop); + pop.setSpecies(species); + species.update(); + pop.update(); + context.commitTransaction(); + return pop; + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create Population", eee); + } + showMsgBox(eee); + } + return null; + } + + public PopulationSeasonInfo createPopulationSeasonInfo(Population pop) { + if (log.isDebugEnabled()) { + log.debug("createSeasonInfo called"); + } + PopulationSeasonInfo seasonInfo = null; + try { + PopulationSeasonInfoDAO dao = IsisFishDAOHelper + .getPopulationSeasonInfoDAO(pop.getTopiaContext()); + seasonInfo = dao.create(); + seasonInfo.setFirstMonth(Month.MONTH[0]); + seasonInfo.setLastMonth(Month.MONTH[3]); + pop.addPopulationSeasonInfo(seasonInfo); + seasonInfo.setPopulation(pop); + + // EC-20090710 ajout du code d'initailisation + // d'un populationseasoninfo + // il a du se perdre au changement d'interface + // swiat>jaxx + seasonInfo.setSimpleLengthChangeMatrix(true); + MatrixND matrix = ((PopulationSeasonInfoImpl)seasonInfo).createNoSpacializedChangeGroupMatrix(); + seasonInfo.setLengthChangeMatrix(matrix); + + seasonInfo.update(); + pop.update(); + // isisContext.commitTransaction(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create PopulationSeasonInfo", eee); + } + showMsgBox(eee); + } + return seasonInfo; + } + + public void removePopulationSeasonInfo(Population pop, + PopulationSeasonInfo populationSeasonInfo) { + if (log.isDebugEnabled()) { + log.debug("removeSeasonInfo called"); + } + try { + pop.removePopulationSeasonInfo(populationSeasonInfo); + pop.update(); + pop.getTopiaContext().commitTransaction(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove PopulationSeasonInfo", eee); + } + showMsgBox(eee); + } + } + + public void createMetierSeasonInfo(Metier metier) { + if (log.isDebugEnabled()) { + log.debug("createSeasonInfo called"); + } + try { + MetierSeasonInfoDAO metierSeasonInfoPS = IsisFishDAOHelper + .getMetierSeasonInfoDAO(metier.getTopiaContext()); + MetierSeasonInfo metierSeasonInfo = metierSeasonInfoPS.create(); + metierSeasonInfo.setFirstMonth(Month.MONTH[0]); + metierSeasonInfo.setLastMonth(Month.MONTH[3]); + metier.addMetierSeasonInfo(metierSeasonInfo); + metierSeasonInfo.update(); + metier.update(); + // isisContext.commitTransaction(); + } catch (Exception eee) { + log.error("Can't create MetierSeasonInfo", eee); + showMsgBox(eee); + } + } + + public void removeMetierSeasonInfo(Metier metier, MetierSeasonInfo info) { + if (log.isDebugEnabled()) { + log.debug("createSeasonInfo called"); + } + try { + metier.removeMetierSeasonInfo(info); + metier.update(); + metier.getTopiaContext().commitTransaction(); + + } catch (Exception eee) { + log.error("Can't create MetierSeasonInfo", eee); + showMsgBox(eee); + } + } + + public Object createRecruitmentDistribution(Population pop) { + if (log.isTraceEnabled()) { + log.trace("createRecruitmentDistributionontext called: " + pop); + } + try { + String val = JOptionPane + .showInputDialog(_("isisfish.message.recruitment.number.month")); + int num = -1; + if (val != null && !"".equals(val)) { + try { + num = Integer.parseInt(val); + } catch (RuntimeException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't parse val: " + val, eee); + } + } + } + + if (num > 0) { + List<String> sem = new ArrayList<String>(num); + for (int i = 0; i < num; i++) { + sem.add(_("isisfish.common.month", i)); + } + MatrixND newMat = MatrixFactory.getInstance().create( + new List[] { sem }); + + MatrixND mat = pop.getRecruitmentDistribution(); + if (mat != null) { + newMat.paste(mat); + } + pop.setRecruitmentDistribution(newMat); + pop.update(); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove PopulationSeasonInfo", eee); + } + showMsgBox(eee); + } + return null; + } + + // Migration + + public Object addMigration(PopulationSeasonInfo info, + PopulationGroup group, Zone departure, Zone arrival, double coeff) { + if (log.isTraceEnabled()) { + log.trace("addMigration called"); + } + try { + MatrixND mat = info.getMigrationMatrix().copy(); + mat.setValue(group, departure, arrival, coeff); + info.setMigrationMatrix(mat); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't add migration", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object addEmigration(PopulationSeasonInfo info, + PopulationGroup group, Zone departure, double coeff) { + if (log.isTraceEnabled()) { + log.trace("addEmigration called"); + } + try { + MatrixND mat = info.getEmigrationMatrix().copy(); + mat.setValue(group, departure, coeff); + info.setEmigrationMatrix(mat); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't add emigration", eee); + } + showMsgBox(eee); + } + return null; + } + + public Object addImmigration(PopulationSeasonInfo info, + PopulationGroup group, Zone arrival, double coeff) { + if (log.isTraceEnabled()) { + log.trace("addImmigration called"); + } + try { + MatrixND mat = info.getImmigrationMatrix().copy(); + mat.setValue(group, arrival, coeff); + info.setImmigrationMatrix(mat); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't add immigration", eee); + } + showMsgBox(eee); + } + return null; + } + + // FisheryRegion + /** @return TODO */ + public Object addMap(FisheryRegion fisheryRegion) { + if (log.isTraceEnabled()) { + log.trace("AddMap called"); + } + + File shp = FileUtil.getFile(".*\\.shp", "shp file"); + try { + if (shp != null) { + // copy shp and ssx to region map directory + String basename = FileUtil.basename(shp, ".shp"); + + String srcMap = shp.getPath(); + srcMap = srcMap.substring(0, srcMap.length() - ".shp".length()); + File ssx = new File(srcMap + ".ssx"); + + RegionStorage regionStorage = RegionStorage + .getRegion(fisheryRegion.getName()); + File destDir = regionStorage.getMapRepository(); + + // copy shp file + File destShp = new File(destDir, basename + ".shp"); + FileUtil.copy(shp, destShp); + + // copy ssx file + File destSsx = new File(destDir, basename + ".ssx"); + if (ssx.exists()) { + FileUtil.copy(ssx, destSsx); + } else { + if (log.isInfoEnabled()) { + log.info("Ssx file don't exist, try to generate it"); + } + SpatialIndex.createIndex(destShp.getPath(), destSsx.getPath()); + } + + List<String> maps = fisheryRegion.getMapFileList(); + maps.add(basename); + fisheryRegion.setMapFileList(maps); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't copy .shp or .ssx file for: " + shp, eee); + } + showMsgBox(eee); + } + return null; + } + + /** + * @param selectedMaps la list dans lequel il faut retirer la carte + * @return TODO + */ + public Object removeMap(FisheryRegion fisheryRegion, Object[] selectedMaps) { + if (log.isTraceEnabled()) { + log.trace("removeMap called"); + } + try { + + List<String> maps = fisheryRegion.getMapFileList(); + + RegionStorage regionStorage = RegionStorage.getRegion(fisheryRegion + .getName()); + File mapDir = regionStorage.getMapRepository(); + + for (Object map : selectedMaps) { + maps.remove(map); + // remove on disk too, if possible + File shp = new File(mapDir, map + ".shp"); + shp.delete(); + File ssx = new File(mapDir, map + ".ssx"); + ssx.delete(); + } + + fisheryRegion.setMapFileList(maps); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove map", eee); + } + showMsgBox(eee); + } + return null; + } + + /** + * Affiche une boite de dialogue demandant a l'utilisateur de rentrer + * un nom de fichier, et met ce nom dans la textField. + * Passe le saveButton en enabled pour marque que la region a ete modifié + * + * @param cellFile file of cells + */ + public void loadCellFile(String cellFile) { + if (log.isTraceEnabled()) { + log.trace("loadCell called"); + } + // FIXME todo loadCellFile + } + + public void saveFisheryRegion(FisheryRegion fisheryRegion) { + if (log.isTraceEnabled()) { + log.trace("save called"); + } + try { + TopiaContext isisContext = fisheryRegion.getTopiaContext(); + + // frame.setInfoText(_("isisfish.message.checking.cell")); + int latNumber = (int) Math + .round((fisheryRegion.getMaxLatitude() - fisheryRegion + .getMinLatitude()) + / fisheryRegion.getCellLengthLatitude()); + int lonNumber = (int) Math + .round((fisheryRegion.getMaxLongitude() - fisheryRegion + .getMinLongitude()) + / fisheryRegion.getCellLengthLongitude()); + + // frame.setProgressMin(0); + // frame.setProgressMax(latNumber * lonNumber); + int progresscpt = 0; + + // il faut peut-etre creer ou supprimer des mailles + CellPointcomparator cellPointcomparator = new CellPointcomparator(); + CellDAO cellPS = IsisFishDAOHelper.getCellDAO(isisContext); + List<Cell> cells = cellPS.findAll(); + Collections.sort(cells, cellPointcomparator); + Point2D.Float point = new Point2D.Float(); + + for (float lati = fisheryRegion.getMinLatitude(); lati < fisheryRegion + .getMaxLatitude(); lati += fisheryRegion + .getCellLengthLatitude()) { + lati = Math.round(lati * 1000f); + lati = lati / 1000.0f; + for (float longi = fisheryRegion.getMinLongitude(); longi < fisheryRegion + .getMaxLongitude(); longi += fisheryRegion + .getCellLengthLongitude()) { + longi = Math.round(longi * 1000f) / 1000.0f; + point.setLocation(lati, longi); + int position = Collections.binarySearch(cells, point, + cellPointcomparator); + if (position >= 0) { + // deja existant on l'enleve de la liste, et on ne cree rien + cells.remove(position); + } else { + // n'existe pas on la cree + Cell cell = cellPS.create(); + cell.setName("La" + lati + "Lo" + longi); + cell.setLatitude(lati); + cell.setLongitude(longi); + cell.setLand(false); + cell.update(); + } + // frame.setProgressValue(++progresscpt); + } + } + + // on est pas en autoUpdate donc il faut faire le update avant le commit + fisheryRegion.update(); + + // toutes les mailles restantes dans la liste sont des mailles en trop + // on les supprimes + + progresscpt = 0; + for (Cell cell : cells) { + // FIXME il faudrait aussi rechercher les objets dependants + // des mailles que l'on va supprimer et demander confirmation + // a l'utilisateur qu'il souhaite reellement supprimer tous + // ces objets. Si ce n'est pas le cas, on sort tout de suite + // avant le commit + cellPS.delete(cell); + } + isisContext.commitTransaction(); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(_("isisfish.error.save.region"), eee); + } + showMsgBox(eee); + } + } + + public Object checkFisheryRegion(FisheryRegion fisheryRegion) { + try { + if (log.isTraceEnabled()) { + log.trace("check called: "); + } + // frame.setInfoText(_("isisfish.message.check.region")); + CheckResult result = new CheckResult(); + CheckRegion.check(fisheryRegion, result); + CheckResultFrame dialog = new CheckResultFrame(); + dialog.setCheckResult(result); + dialog.setVisible(true); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error(_("isisfish.error.check.region"), eee); + } + showMsgBox(eee); + } + return null; + } +} Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,206 +0,0 @@ -<!-- -/* *##% - * Copyright (C) 2005 - 2009 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 published by the Free Software Foundation; either version 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ ---> -<JPanel layout='{new BorderLayout()}' abstract="true"> - - <!-- UI state when editing. If no entity selected, actif = false --> - <Boolean id='actif' javaBean='false'/> - - <!-- True only for sensitivity simulation --> - <Boolean id='sensitivity' javaBean='false'/> - - <!-- Next button title --> - <java.lang.String id='buttonTitle' javaBean='""'/> - - <!-- Next path --> - <java.lang.String id='nextPath' javaBean='null'/> - - <jaxx.runtime.swing.BlockingLayerUI id='layerUI' - blockIcon='{SwingUtil.createImageIcon("building.png")}' - acceptIcon='{SwingUtil.createImageIcon("building_add.png")}' - useIcon='true' - blockingColor='{new Color(50,50,50)}' - acceptAction='{new AbstractAction() { - private static final long serialVersionUID = 1L; - @Override - public void actionPerformed(ActionEvent e) { - accept(e); - } - }}' /> - <!-- Sensitivity UI bloking layer --> - <jaxx.runtime.swing.BlockingLayerUI2 id='layerUI2' - blockIcon='{SwingUtil.createImageIcon("building.png")}' - acceptIcon='{SwingUtil.createImageIcon("building_add.png")}' - acceptAction='{new AbstractAction() { - private static final long serialVersionUID = 1L; - @Override - public void actionPerformed(ActionEvent e) { - accept(e); - } - }}' /> - - <script><![CDATA[ -import fr.ifremer.isisfish.ui.WelcomePanelUI; -import fr.ifremer.isisfish.entities.FisheryRegion; -import org.codelutin.topia.persistence.TopiaEntity; -import javax.swing.JComponent; -import fr.ifremer.isisfish.ui.util.UtilsUI; -import fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI; -import fr.ifremer.isisfish.ui.sensitivity.EditorHelper; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabbedPaneListener; - -protected ChangeListener tabbedPaneChangeListener; - -/** - * This method is UI entry point. - * - * It's called : - * - by input tree to first display UI - * - by input verifier on cancel action - * - * 20090602 chatellier : make abstract, must be implemented ! - */ -public abstract void refresh(); - -/** - * This is a hack for tabbed UI. - * - * In this case of UI, they have multiples save/cancel - * buttons, they have to be manually activated - * on tab siwtching. - */ -public abstract void setActionButtons(); - -public InputAction getAction() { - return getContextValue(InputAction.class); -} -public InputSaveVerifier getVerifier() { - return getContextValue(InputSaveVerifier.class); -} -public FisheryRegion getRegion() { - return getContextValue(FisheryRegion.class); -} -public void setInfoText(String msg) { - WelcomePanelUI root = getParentContainer(WelcomePanelUI.class); - if (root != null){ - root.setInfoText(msg); - } -} -protected void goTo() { - getParentContainer(InputUI.class).setTreeSelection(getNextPath()); -} - -/** - * Mettre a jour la region dans une map si necessaire. - * - * @param map la map a mettre a jour si necessaire - */ -protected void refreshRegionInMap(fr.ifremer.isisfish.map.IsisMapBean map) { - FisheryRegion fisheryRegion = map.getFisheryRegion(); - FisheryRegion regionFromContext = getRegion(); - if (fisheryRegion == null || !fisheryRegion.equals(regionFromContext)) { - log.info("use now " + regionFromContext + " in map " + map); - map.setFisheryRegion(regionFromContext); - } -} - - -// TODO this method cause a lot of probleme -// must cast TopiaEntity to impl in inherited UIs... -// 20090602 chatellier : useless method ? cause a lot of cast problem -//public void setBean(TopiaEntity t) {} - -public void setLayer(boolean active) { - if (this.get$objectMap() != null && active) { - for (JComponent boxed : SwingUtil.getLayeredComponents(this)) { - // Verifie si dans l'entré existe dans le fichier sensitivity.properties - Class classBean = (Class)boxed.getClientProperty("bean"); - String method = (String)boxed.getClientProperty("method"); - boolean isSensitivityFactorEnabled = false; - if (classBean != null) { - isSensitivityFactorEnabled = UtilsUI.isSensitivityFactorEnabled(classBean.getSimpleName().replace("Impl", "") + "." + method); - } - if (isSensitivityFactorEnabled) { - jaxx.runtime.swing.BlockingLayerUI2 ui = layerUI2.clone(); - SwingUtil.getLayer(boxed).setUI(ui); - } else { - jaxx.runtime.swing.BlockingLayerUI ui = layerUI.clone(); - ui.setBlock(true); - ui.setUseIcon(isActif()); - SwingUtil.getLayer(boxed).setUI(ui); - } - } - } -} - -protected void accept(ActionEvent e) { - JComponent source = (JComponent) e.getSource(); - Class classBean = (Class)source.getClientProperty("bean"); - String beanID = (String)source.getClientProperty("beanID"); - TopiaEntity bean = null; - if (beanID == null){ - bean = getVerifier().getEntity(classBean); - } - else{ - bean = getVerifier().getEntity(classBean, beanID); - } - if (bean != null) { - FactorWizardUI wizard = new FactorWizardUI(this); - wizard.initNew(source, bean, EditorHelper.canBeContinue(source, bean)); - wizard.pack(); - wizard.setVisible(true); - } -} - -/** - * Install tabbed pane change listener depending on sensitivity. - * (init at first call) - * - * @param tabbedPane tabbed pane to install change listener - */ -protected void installChangeListener(JTabbedPane tabbedPane) { - - // remove already registred listeners - for (ChangeListener changeListener : tabbedPane.getChangeListeners()) { - tabbedPane.removeChangeListener(changeListener); - } - - if (tabbedPaneChangeListener == null) { - if (isSensitivity()) { - tabbedPaneChangeListener = new SensitivityTabbedPaneListener(); - } else { - tabbedPaneChangeListener = new InputTabbedPaneListener(); - } - } - - tabbedPane.addChangeListener(tabbedPaneChangeListener); -} - -/** - * Active les boutons sur l'onglet actuellement affiché. - */ -protected void setCurrentTabActionButtons(JTabbedPane tabbedPane) { - InputContentUI selectedUI = (InputContentUI) tabbedPane.getSelectedComponent(); - selectedUI.setActionButtons(); -} - -]]></script> - <JPanel id='body' constraints='BorderLayout.CENTER'/> - <JButton id='next' text='{getButtonTitle()}' constraints='BorderLayout.SOUTH' visible='{getNextPath() != null}' onActionPerformed='goTo()'/> -</JPanel> Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx (from rev 2492, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,210 @@ +<!-- +/* *##% + * Copyright (C) 2005 - 2009 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 published by the Free Software Foundation; either version 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ +--> +<JPanel layout='{new BorderLayout()}' abstract="true"> + + <!-- UI state when editing. If no entity selected, actif = false --> + <Boolean id='actif' javaBean='false'/> + + <!-- True only for sensitivity simulation --> + <Boolean id='sensitivity' javaBean='false'/> + + <!-- Next button title --> + <java.lang.String id='buttonTitle' javaBean='""'/> + + <!-- Next path --> + <java.lang.String id='nextPath' javaBean='null'/> + + <!-- Layer bloquant completement la saisie --> + <jaxx.runtime.swing.BlockingLayerUI id='layerUI' + blockingColor='{new Color(50,50,50)}' /> + <!-- acceptAction='{new AbstractAction() { + private static final long serialVersionUID = 1L; + @Override + public void actionPerformed(ActionEvent e) { + accept(e); + } + }}' --> + + <!-- Layer avec les icones permettant d'ajouter des facteurs --> + <jaxx.runtime.swing.BlockingLayerUI2 id='layerUI2' + blockIcon='{SwingUtil.createImageIcon("building.png")}' + acceptIcon='{SwingUtil.createImageIcon("building_add.png")}' + acceptAction='{new AbstractAction() { + private static final long serialVersionUID = 1L; + @Override + public void actionPerformed(ActionEvent e) { + accept(e); + } + }}' /> + + <script><![CDATA[ +import fr.ifremer.isisfish.ui.WelcomePanelUI; +import fr.ifremer.isisfish.entities.FisheryRegion; +import org.codelutin.topia.persistence.TopiaEntity; +import javax.swing.JComponent; +import fr.ifremer.isisfish.ui.util.UtilsUI; +import fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI; +import fr.ifremer.isisfish.ui.sensitivity.EditorHelper; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabbedPaneListener; + +protected ChangeListener tabbedPaneChangeListener; + +/** + * This method is UI entry point. + * + * It's called : + * - by input tree to first display UI + * - by input verifier on cancel action + * + * 20090602 chatellier : make abstract, must be implemented ! + */ +public abstract void refresh(); + +/** + * This is a hack for tabbed UI. + * + * In this case of UI, they have multiples save/cancel + * buttons, they have to be manually activated + * on tab siwtching. + */ +public abstract void setActionButtons(); + +public InputAction getAction() { + return getContextValue(InputAction.class); +} +public InputSaveVerifier getVerifier() { + return getContextValue(InputSaveVerifier.class); +} +public FisheryRegion getRegion() { + return getContextValue(FisheryRegion.class); +} +public void setInfoText(String msg) { + WelcomePanelUI root = getParentContainer(WelcomePanelUI.class); + if (root != null){ + root.setInfoText(msg); + } +} +protected void goTo() { + getParentContainer(InputUI.class).setTreeSelection(getNextPath()); +} + +/** + * Mettre a jour la region dans une map si necessaire. + * + * @param map la map a mettre a jour si necessaire + */ +protected void refreshRegionInMap(fr.ifremer.isisfish.map.IsisMapBean map) { + FisheryRegion fisheryRegion = map.getFisheryRegion(); + FisheryRegion regionFromContext = getRegion(); + if (fisheryRegion == null || !fisheryRegion.equals(regionFromContext)) { + log.info("use now " + regionFromContext + " in map " + map); + map.setFisheryRegion(regionFromContext); + } +} + + +// TODO this method cause a lot of probleme +// must cast TopiaEntity to impl in inherited UIs... +// 20090602 chatellier : useless method ? cause a lot of cast problem +//public void setBean(TopiaEntity t) {} + +public void setLayer(boolean active) { + if (this.get$objectMap() != null && active) { + for (JComponent boxed : SwingUtil.getLayeredComponents(this)) { + // Verifie si dans l'entré existe dans le fichier sensitivity.properties + Class classBean = (Class)boxed.getClientProperty("bean"); + String method = (String)boxed.getClientProperty("method"); + boolean isSensitivityFactorEnabled = false; + if (classBean != null) { + isSensitivityFactorEnabled = UtilsUI.isSensitivityFactorEnabled(classBean.getSimpleName().replace("Impl", "") + "." + method); + } + if (isSensitivityFactorEnabled) { + jaxx.runtime.swing.BlockingLayerUI2 ui = layerUI2.clone(); + SwingUtil.getLayer(boxed).setUI(ui); + } else { + jaxx.runtime.swing.BlockingLayerUI ui = layerUI.clone(); + ui.setBlock(true); + ui.setUseIcon(isActif()); + SwingUtil.getLayer(boxed).setUI(ui); + } + } + } +} + +/** + * Action appelée lors du clic sur un layer. + * + * @param e l'event initial intersepté par le layer + */ +protected void accept(ActionEvent e) { + JComponent source = (JComponent) e.getSource(); + Class classBean = (Class)source.getClientProperty("bean"); + String beanID = (String)source.getClientProperty("beanID"); + TopiaEntity bean = null; + if (beanID == null) { + bean = getVerifier().getEntity(classBean); + } + else { + bean = getVerifier().getEntity(classBean, beanID); + } + if (bean != null) { + FactorWizardUI wizard = new FactorWizardUI(this); + wizard.initNew(source, bean, EditorHelper.canBeContinue(source, bean)); + wizard.pack(); + wizard.setVisible(true); + } +} + +/** + * Install tabbed pane change listener depending on sensitivity. + * (init at first call) + * + * @param tabbedPane tabbed pane to install change listener + */ +protected void installChangeListener(JTabbedPane tabbedPane) { + + // remove already registred listeners + for (ChangeListener changeListener : tabbedPane.getChangeListeners()) { + tabbedPane.removeChangeListener(changeListener); + } + + if (tabbedPaneChangeListener == null) { + if (isSensitivity()) { + tabbedPaneChangeListener = new SensitivityTabbedPaneListener(); + } else { + tabbedPaneChangeListener = new InputTabbedPaneListener(); + } + } + + tabbedPane.addChangeListener(tabbedPaneChangeListener); +} + +/** + * Active les boutons sur l'onglet actuellement affiché. + */ +protected void setCurrentTabActionButtons(JTabbedPane tabbedPane) { + InputContentUI selectedUI = (InputContentUI) tabbedPane.getSelectedComponent(); + selectedUI.setActionButtons(); +} + +]]></script> + <JPanel id='body' constraints='BorderLayout.CENTER'/> + <JButton id='next' text='{getButtonTitle()}' constraints='BorderLayout.SOUTH' visible='{getNextPath() != null}' onActionPerformed='goTo()'/> +</JPanel> Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,623 +0,0 @@ -/* *##% - * Copyright (C) 2005 - 2009 - * Ifremer, Code Lutin, Cedric 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 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ - -package fr.ifremer.isisfish.ui.input; - -import static org.codelutin.i18n.I18n._; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; - -import jaxx.runtime.swing.ErrorDialogUI; -import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; - -import org.apache.commons.beanutils.MethodUtils; -import org.apache.commons.lang.ClassUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.codelutin.topia.TopiaContext; -import org.codelutin.topia.TopiaException; -import org.codelutin.topia.persistence.TopiaDAO; -import org.codelutin.topia.persistence.TopiaEntity; - -import fr.ifremer.isisfish.IsisFishDAOHelper; -import fr.ifremer.isisfish.ui.SaveVerifier; -import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; - -/** - * InputSaveVerifier. - * - * @author letellier - * @version $Revision: 1312 $ - * - * Last update: $Date: 2008-08-28 10:21:07 +0200 (jeu, 28 aoû 2008) $ - * by : $Author: sletellier $ - */ -public class InputSaveVerifier implements SaveVerifier { - - /** Class logger. */ - private static Log log = LogFactory.getLog(InputSaveVerifier.class); - - /** New button. Used to create new {@link #type} component. */ - protected JButton currentNewButton = null; - /** Delete button. */ - protected JButton currentDeleteButton = null; - /** Save button. */ - protected JButton currentSaveButton = null; - /** Cancel button. */ - protected JButton currentCancelButton = null; - - protected ActionListener saveListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - topiaSave(); - } - }; - - protected ActionListener cancelListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - topiaCancel(); - } - }; - - protected ActionListener newListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - topiaCreate(); - } - }; - - protected ActionListener deleteListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - topiaRemove(); - } - }; - - /** Entity type for new creation. */ - protected String type = null; - - protected boolean editable = false; - protected boolean changed = false; - - protected NavigationTreeNode currentNode = null; - protected String currentOnglet = null; - - protected TopiaContext isisContext = null; - - /** - * Map entity key to {@link TopiaEntity}. - */ - protected HashMap<String, TopiaEntity> currentEntities = new HashMap<String, TopiaEntity>(); - protected HashSet<InputContentUI> currentPanels = new HashSet<InputContentUI>(); - - protected InputUI rootUI; - protected SensitivityTabUI sensUI; - - @Override - public int checkEdit() { - int response = JOptionPane.NO_OPTION; - if (editable) { - if (changed) { - // ask user to close edition - // still in edit mode, must warn user - response = askUser(_("isisfish.message.page.modified")); - if (response == JOptionPane.NO_OPTION) { - topiaCancel(); - } else if (response == JOptionPane.YES_OPTION) { - topiaSave(); - } - } - } - return response; - } - - /** - * Ask user option to save non saved datas. - * - * @param message message to display - * @return user option - */ - protected int askUser(String message) { - int response = JOptionPane.showConfirmDialog(rootUI, message, - _("isisfish.input.menu.commit"), - JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); - return response; - } - - protected void topiaChanged() { - changed = true; - setPanelsActifs(); - setEnabled(currentSaveButton, true); - setEnabled(currentCancelButton, true); - setEnabled(currentNewButton, false); - setEnabled(currentDeleteButton, false); - } - - protected void noModif() { - changed = false; - setPanelsActifs(); - setEnabled(currentSaveButton, false); - setEnabled(currentCancelButton, false); - setEnabled(currentNewButton, true); - setEnabled(currentDeleteButton, editable); - } - - /** - * Set component enabled state. - * - * @param c component - * @param enabled enabled state - */ - protected void setEnabled(Component c, boolean enabled) { - if (c != null) { - c.setEnabled(enabled); - } - } - - /** - * Delete one entity and commit the change, try to selected intelligently - * other node in tree. - * <p/> - * Refresh all ui component where name match "input<entity type without - * package >.*" - */ - protected void topiaRemove() { - if (log.isTraceEnabled()) { - log.trace("remove called"); - } - String msg = ""; - try { - boolean doDelete; - TopiaEntity topiaEntity = (TopiaEntity) currentNode - .getJAXXContextValue(rootUI); - List<TopiaEntity> allWillBeRemoved = topiaEntity.getComposite(); - if (allWillBeRemoved.size() > 0) { - String label = _("isisfish.message.delete.object", topiaEntity - .toString()); - String text = ""; - for (TopiaEntity e : allWillBeRemoved) { - text += ClassUtils.getShortClassName(e.getClass()) + " - " - + e.toString() + "\n"; - } - int resp = showTextAreaConfirmationMessage(null, label, text, - _("isisfish.message.delete.entities"), - JOptionPane.YES_NO_OPTION); - doDelete = resp == JOptionPane.YES_OPTION; - } else { - String text = _("isisfish.message.confirm.delete.object", - topiaEntity.toString()); - int resp = JOptionPane.showConfirmDialog(null, text, - _("isisfish.message.delete.entity"), - JOptionPane.YES_NO_OPTION); - doDelete = resp == JOptionPane.YES_OPTION; - } - - if (doDelete) { - topiaEntity.delete(); - isisContext.commitTransaction(); - msg = _("isisfish.message.remove.finished"); - } else { - msg = _("isisfish.message.remove.canceled"); - } - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't remove entity: " - + currentEntities.get(0), eee); - } - ErrorDialogUI.showError(eee); - } - rootUI.setInfoText(msg); - String path = currentNode.getParent().getContextPath(); - rootUI.setTreeModel(); - rootUI.setTreeSelection(path); - noModif(); - } - - /** - * Display a JOptionPane with a JTextArea as main component. - * - * @param parent parent - * @param labelMessage label message - * @param textMessage text message into area - * @param title - * @param option - * @return user response - */ - protected int showTextAreaConfirmationMessage(Component parent, - String labelMessage, String textMessage, String title, int option) { - JLabel labelForMessage = new JLabel(labelMessage); - JTextArea areaForMessage = new JTextArea(textMessage); - areaForMessage.setEditable(false); - areaForMessage.setAutoscrolls(true); - JScrollPane spMessage = new JScrollPane(areaForMessage); - spMessage.setPreferredSize(new Dimension(500, 100)); // don't remove popup is huge - - int response = JOptionPane.showConfirmDialog(parent, new Object[] { - labelForMessage, spMessage }, title, option); - return response; - } - - protected void topiaCreate() { - - if (log.isDebugEnabled()) { - log.debug("Create called for " + type); - } - - try { - String name = type + "_new"; - - Method method = MethodUtils.getAccessibleMethod( - IsisFishDAOHelper.class, "get" + type + "DAO", - TopiaContext.class); - TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) method.invoke( - null, isisContext); - - TopiaEntity entity = dao.create("name", name); - entity.update(); - isisContext.commitTransaction(); - - String path = currentNode.getParent().getContextPath() + "/" - + entity.getTopiaId(); - if (!editable) { - path = currentNode.getContextPath() + "/" + entity.getTopiaId(); - } - - rootUI.setTreeModel(); - rootUI.setTreeSelection(path); - - rootUI.setInfoText(_("isisfish.message.creation.finished")); - - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't create entity", eee); - } - showMsgBox(eee); - } - } - - /** - * Save all non saved entities. - * - * Change registred button states. - * Commit opened topia context. - */ - protected void topiaSave() { - try { - noModif(); - for (TopiaEntity t : currentEntities.values()) { - t.update(); - if (log.isDebugEnabled()) { - log.debug("updating : " + t); - } - } - isisContext.commitTransaction(); - rootUI.repaintNode(currentNode.getContextPath()); - rootUI.setInfoText(_("isisfish.message.save.finished")); - } catch (TopiaException eee) { - if (log.isErrorEnabled()) { - log.error("Can't save region", eee); - } - showMsgBox(eee); - } - } - - /** - * Cancel all modification on entity (rollback), and force reload it. - */ - protected void topiaCancel() { - try { - noModif(); - isisContext.rollbackTransaction(); - Map<String, TopiaEntity> canceledEntity = (Map<String, TopiaEntity>)currentEntities.clone(); - - currentEntities.clear(); - for (Entry<String, TopiaEntity> currentEntity : canceledEntity.entrySet()) { - TopiaEntity t = isisContext.findByTopiaId(currentEntity.getValue().getTopiaId()); - - // TODO a quoi ca sert de recharger les entités ? - // desynchronise la précédente - // fix : org.hibernate.NonUniqueObjectException: a different object with the - // same identifier value was already associated with the session - //((TopiaContextImpl)isisContext).getHibernate().evict(t2); - //t.setTopiaId(null); - - rootUI.repaintNode(currentNode.getContextPath()); - rootUI.setTreeSelection(currentNode.getContextPath()); - - String key = currentEntity.getKey(); - addCurrentEntity(t, key); - } - - // refresh all registred panel - // to discard modification in UI - refreshAll(); - rootUI.setInfoText(_("isisfish.message.cancel.finished")); - } catch (Exception eee) { - if (log.isErrorEnabled()) { - log.error("Can't cancel modification in region", eee); - } - showMsgBox(eee); - } - } - - /** - * Display exception into jaxx error dialog component. - * - * @param e exception to display - */ - protected void showMsgBox(Exception e) { - ErrorDialogUI.showError(e); - } - - protected void setPanelsActifs() { - for (InputContentUI panel : currentPanels) { - panel.setActif(editable); - } - } - - /** - * Refresh all registered {@link InputContentUI} component. - * - * Call {@link InputContentUI#refresh()} method on each component. - */ - public void refreshAll() { - - // chatellier 20090602 refresh() call addCurrentPanel - // and cause ConcurentModificationException. - Set<InputContentUI> panelsToRefresh = (HashSet<InputContentUI>)currentPanels.clone(); - for (InputContentUI panel : panelsToRefresh) { - if (log.isDebugEnabled()) { - log.debug("Verifier refresh ui : " + panel); - } - panel.refresh(); - // do not call refresh action buttons here - panel.setActif(editable); - } - } - - /** - * Add entity to check for modification. - * - * The verifier register to entity using {@link TopiaEntity#addPropertyChangeListener(PropertyChangeListener)}. - * So modification have to be done on current entity. - * - * To check for embedded entity, add it too. - * - * Remove all entity with key - * - * @param currentEntity entity to check - * @param key specific key (defaut to topiaId) - */ - public void addCurrentEntity(TopiaEntity currentEntity, String key) { - if (currentEntity != null) { - editable = true; - isisContext = currentEntity.getTopiaContext(); - currentEntity - .addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (log.isDebugEnabled()) { - log.debug("PropertyChanged : " - + evt.getPropertyName() - + " New Value : " + evt.getNewValue()); - } - topiaChanged(); - } - }); - // chatellier 20090602 , pas sur du code suivant - // plutot ne rien faire, si une autre entite de la meme - // clé est ajoutée, elle sera ecrasée - //TopiaEntity entity = getEntity(currentEntity.getClass()); - //if (entity != null) { - // currentEntities.remove(entity); - //} - - this.currentEntities.put(key, currentEntity); - setPanelsActifs(); - } - } - - /** - * Add entity to check for modification. - * - * The verifier register to entity using {@link TopiaEntity#addPropertyChangeListener(PropertyChangeListener)}. - * So modification have to be done on current entity. - * - * To check for embedded entity, add it too. - * - * Remove all entity with key - * - * @param currentEntity entity to check - */ - public void addCurrentEntity(TopiaEntity currentEntity) { - if (currentEntity != null) { - addCurrentEntity(currentEntity, currentEntity.getTopiaId()); - } - } - - public void reset() { - removeAllEntity(); - removeAllPanels(); - this.currentCancelButton = null; - this.currentDeleteButton = null; - this.currentNewButton = null; - this.currentSaveButton = null; - this.currentOnglet = null; - this.currentNode = null; - } - - public void removeAllEntity() { - currentEntities.clear(); - editable = false; - noModif(); - setPanelsActifs(); - } - - public void addCurrentPanel(InputContentUI... panels) { - for (InputContentUI ui : panels) { - editable = !currentEntities.isEmpty(); - this.currentPanels.add(ui); - if (rootUI == null) { - ui.setSensitivity(true); - ui.setLayer(true); - } - ui.refresh(); - // do not call refresh action buttons here - ui.setActif(editable); - } - } - - public void removeAllPanels() { - currentPanels.clear(); - } - - public boolean isEditable() { - return editable; - } - - public void setSaveButton(JButton saveButton) { - setSaveButton(saveButton, true); - } - - public void setSaveButton(JButton saveButton, Boolean listener) { - if (listener) { - // TODO what is it for (remove/readd) ? - saveButton.removeActionListener(saveListener); - saveButton.addActionListener(saveListener); - } - saveButton.setEnabled(changed); - saveButton.setText(_("isisfish.common.save")); - this.currentSaveButton = saveButton; - } - - public void setNewButton(JButton saveButton, String name) { - setNewButton(saveButton, name, true); - } - - public void setNewButton(JButton newButton, String t, Boolean listener) { - if (listener) { - // TODO what is it for (remove/readd) ? - newButton.removeActionListener(newListener); - newButton.addActionListener(newListener); - } - newButton.setText(_("isisfish.common.new")); - newButton.setEnabled(!changed); - this.type = t; - this.currentNewButton = newButton; - } - - public void setCancelButton(JButton cancelButton) { - cancelButton.removeActionListener(cancelListener); - cancelButton.addActionListener(cancelListener); - cancelButton.setText(_("isisfish.common.cancel")); - cancelButton.setEnabled(changed); - this.currentCancelButton = cancelButton; - } - - public void setDeleteButton(JButton deleteButton) { - setDeleteButton(deleteButton, true); - } - - public void setDeleteButton(JButton deleteButton, boolean listener) { - if (listener) { - deleteButton.removeActionListener(deleteListener); - deleteButton.addActionListener(deleteListener); - } - deleteButton.setEnabled(editable); - deleteButton.setText(_("isisfish.common.remove")); - this.currentDeleteButton = deleteButton; - } - - public TopiaContext getIsisContext() { - return isisContext; - } - - public Collection<TopiaEntity> getCurrentEntities() { - return currentEntities.values(); - } - - public <E extends TopiaEntity> E getEntity(Class<E> clazz, String key) { - return (E) currentEntities.get(key); - } - - public <E extends TopiaEntity> E getEntity(Class<E> clazz) { - for (TopiaEntity te : currentEntities.values()) { - if (clazz.isInstance(te)) { - return (E) te; - } - } - return null; - } - - public String getCurrentOnglet() { - return currentOnglet; - } - - public NavigationTreeNode getCurrentNode() { - return currentNode; - } - - public void setIsisContext(TopiaContext isisContext) { - this.isisContext = isisContext; - } - - public void setEditable(boolean editable) { - this.editable = editable; - } - - public void setCurrentOnglet(String currentOnglet) { - this.currentOnglet = currentOnglet; - } - - public void setCurrentNode(NavigationTreeNode currentNode) { - this.currentNode = currentNode; - } - - protected void setRootPanel(InputUI inputUI) { - this.rootUI = inputUI; - } - - public SensitivityTabUI getSensPanel() { - return sensUI; - } - - public void setSensPanel(SensitivityTabUI sensUI) { - this.sensUI = sensUI; - } -} Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java (from rev 2483, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,624 @@ +/* *##% + * Copyright (C) 2005 - 2009 + * Ifremer, Code Lutin, Cedric 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.input; + +import static org.codelutin.i18n.I18n._; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; + +import jaxx.runtime.swing.ErrorDialogUI; +import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; + +import org.apache.commons.beanutils.MethodUtils; +import org.apache.commons.lang.ClassUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaContext; +import org.codelutin.topia.TopiaException; +import org.codelutin.topia.persistence.TopiaDAO; +import org.codelutin.topia.persistence.TopiaEntity; + +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.ui.SaveVerifier; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; + +/** + * InputSaveVerifier. + * + * @author letellier + * @version $Revision: 1312 $ + * + * Last update: $Date: 2008-08-28 10:21:07 +0200 (jeu, 28 aoû 2008) $ + * by : $Author: sletellier $ + */ +public class InputSaveVerifier implements SaveVerifier { + + /** Class logger. */ + private static Log log = LogFactory.getLog(InputSaveVerifier.class); + + /** New button. Used to create new {@link #type} component. */ + protected JButton currentNewButton = null; + /** Delete button. */ + protected JButton currentDeleteButton = null; + /** Save button. */ + protected JButton currentSaveButton = null; + /** Cancel button. */ + protected JButton currentCancelButton = null; + + protected ActionListener saveListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + topiaSave(); + } + }; + + protected ActionListener cancelListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + topiaCancel(); + } + }; + + protected ActionListener newListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + topiaCreate(); + } + }; + + protected ActionListener deleteListener = new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + topiaRemove(); + } + }; + + /** Entity type for new creation. */ + protected String type = null; + + protected boolean editable = false; + protected boolean changed = false; + + protected NavigationTreeNode currentNode = null; + protected String currentOnglet = null; + + protected TopiaContext isisContext = null; + + /** + * Map entity key to {@link TopiaEntity}. + */ + protected HashMap<String, TopiaEntity> currentEntities = new HashMap<String, TopiaEntity>(); + protected HashSet<InputContentUI> currentPanels = new HashSet<InputContentUI>(); + + protected InputUI rootUI; + protected SensitivityTabUI sensUI; + + @Override + public int checkEdit() { + int response = JOptionPane.NO_OPTION; + if (editable) { + if (changed) { + // ask user to close edition + // still in edit mode, must warn user + response = askUser(_("isisfish.message.page.modified")); + if (response == JOptionPane.NO_OPTION) { + topiaCancel(); + } else if (response == JOptionPane.YES_OPTION) { + topiaSave(); + } + } + } + return response; + } + + /** + * Ask user option to save non saved datas. + * + * @param message message to display + * @return user option + */ + protected int askUser(String message) { + int response = JOptionPane.showConfirmDialog(rootUI, message, + _("isisfish.input.menu.commit"), + JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); + return response; + } + + protected void topiaChanged() { + changed = true; + setPanelsActifs(); + setEnabled(currentSaveButton, true); + setEnabled(currentCancelButton, true); + setEnabled(currentNewButton, false); + setEnabled(currentDeleteButton, false); + } + + protected void noModif() { + changed = false; + setPanelsActifs(); + setEnabled(currentSaveButton, false); + setEnabled(currentCancelButton, false); + setEnabled(currentNewButton, true); + setEnabled(currentDeleteButton, editable); + } + + /** + * Set component enabled state. + * + * @param c component + * @param enabled enabled state + */ + protected void setEnabled(Component c, boolean enabled) { + if (c != null) { + c.setEnabled(enabled); + } + } + + /** + * Delete one entity and commit the change, try to selected intelligently + * other node in tree. + * <p/> + * Refresh all ui component where name match "input<entity type without + * package >.*" + */ + protected void topiaRemove() { + if (log.isTraceEnabled()) { + log.trace("remove called"); + } + String msg = ""; + try { + boolean doDelete; + TopiaEntity topiaEntity = (TopiaEntity) currentNode + .getJAXXContextValue(rootUI); + List<TopiaEntity> allWillBeRemoved = topiaEntity.getComposite(); + if (allWillBeRemoved.size() > 0) { + String label = _("isisfish.message.delete.object", topiaEntity + .toString()); + String text = ""; + for (TopiaEntity e : allWillBeRemoved) { + text += ClassUtils.getShortClassName(e.getClass()) + " - " + + e.toString() + "\n"; + } + int resp = showTextAreaConfirmationMessage(null, label, text, + _("isisfish.message.delete.entities"), + JOptionPane.YES_NO_OPTION); + doDelete = resp == JOptionPane.YES_OPTION; + } else { + String text = _("isisfish.message.confirm.delete.object", + topiaEntity.toString()); + int resp = JOptionPane.showConfirmDialog(null, text, + _("isisfish.message.delete.entity"), + JOptionPane.YES_NO_OPTION); + doDelete = resp == JOptionPane.YES_OPTION; + } + + if (doDelete) { + topiaEntity.delete(); + isisContext.commitTransaction(); + msg = _("isisfish.message.remove.finished"); + } else { + msg = _("isisfish.message.remove.canceled"); + } + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't remove entity: " + + currentEntities.get(0), eee); + } + ErrorDialogUI.showError(eee); + } + rootUI.setInfoText(msg); + // set noModif BEFORE path changed + noModif(); + String path = currentNode.getParent().getContextPath(); + rootUI.setTreeModel(); + rootUI.setTreeSelection(path); + } + + /** + * Display a JOptionPane with a JTextArea as main component. + * + * @param parent parent + * @param labelMessage label message + * @param textMessage text message into area + * @param title + * @param option + * @return user response + */ + protected int showTextAreaConfirmationMessage(Component parent, + String labelMessage, String textMessage, String title, int option) { + JLabel labelForMessage = new JLabel(labelMessage); + JTextArea areaForMessage = new JTextArea(textMessage); + areaForMessage.setEditable(false); + areaForMessage.setAutoscrolls(true); + JScrollPane spMessage = new JScrollPane(areaForMessage); + spMessage.setPreferredSize(new Dimension(500, 100)); // don't remove popup is huge + + int response = JOptionPane.showConfirmDialog(parent, new Object[] { + labelForMessage, spMessage }, title, option); + return response; + } + + protected void topiaCreate() { + + if (log.isDebugEnabled()) { + log.debug("Create called for " + type); + } + + try { + String name = type + "_new"; + + Method method = MethodUtils.getAccessibleMethod( + IsisFishDAOHelper.class, "get" + type + "DAO", + TopiaContext.class); + TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) method.invoke( + null, isisContext); + + TopiaEntity entity = dao.create("name", name); + entity.update(); + isisContext.commitTransaction(); + + String path = currentNode.getParent().getContextPath() + "/" + + entity.getTopiaId(); + if (!editable) { + path = currentNode.getContextPath() + "/" + entity.getTopiaId(); + } + + rootUI.setTreeModel(); + rootUI.setTreeSelection(path); + + rootUI.setInfoText(_("isisfish.message.creation.finished")); + + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't create entity", eee); + } + showMsgBox(eee); + } + } + + /** + * Save all non saved entities. + * + * Change registred button states. + * Commit opened topia context. + */ + protected void topiaSave() { + try { + noModif(); + for (TopiaEntity t : currentEntities.values()) { + t.update(); + if (log.isDebugEnabled()) { + log.debug("updating : " + t); + } + } + isisContext.commitTransaction(); + rootUI.repaintNode(currentNode.getContextPath()); + rootUI.setInfoText(_("isisfish.message.save.finished")); + } catch (TopiaException eee) { + if (log.isErrorEnabled()) { + log.error("Can't save region", eee); + } + showMsgBox(eee); + } + } + + /** + * Cancel all modification on entity (rollback), and force reload it. + */ + protected void topiaCancel() { + try { + noModif(); + isisContext.rollbackTransaction(); + Map<String, TopiaEntity> canceledEntity = (Map<String, TopiaEntity>)currentEntities.clone(); + + currentEntities.clear(); + for (Entry<String, TopiaEntity> currentEntity : canceledEntity.entrySet()) { + TopiaEntity t = isisContext.findByTopiaId(currentEntity.getValue().getTopiaId()); + + // TODO a quoi ca sert de recharger les entités ? + // desynchronise la précédente + // fix : org.hibernate.NonUniqueObjectException: a different object with the + // same identifier value was already associated with the session + //((TopiaContextImpl)isisContext).getHibernate().evict(t2); + //t.setTopiaId(null); + + rootUI.repaintNode(currentNode.getContextPath()); + rootUI.setTreeSelection(currentNode.getContextPath()); + + String key = currentEntity.getKey(); + addCurrentEntity(t, key); + } + + // refresh all registred panel + // to discard modification in UI + refreshAll(); + rootUI.setInfoText(_("isisfish.message.cancel.finished")); + } catch (Exception eee) { + if (log.isErrorEnabled()) { + log.error("Can't cancel modification in region", eee); + } + showMsgBox(eee); + } + } + + /** + * Display exception into jaxx error dialog component. + * + * @param e exception to display + */ + protected void showMsgBox(Exception e) { + ErrorDialogUI.showError(e); + } + + protected void setPanelsActifs() { + for (InputContentUI panel : currentPanels) { + panel.setActif(editable); + } + } + + /** + * Refresh all registered {@link InputContentUI} component. + * + * Call {@link InputContentUI#refresh()} method on each component. + */ + public void refreshAll() { + + // chatellier 20090602 refresh() call addCurrentPanel + // and cause ConcurentModificationException. + Set<InputContentUI> panelsToRefresh = (HashSet<InputContentUI>)currentPanels.clone(); + for (InputContentUI panel : panelsToRefresh) { + if (log.isDebugEnabled()) { + log.debug("Verifier refresh ui : " + panel); + } + panel.refresh(); + // do not call refresh action buttons here + panel.setActif(editable); + } + } + + /** + * Add entity to check for modification. + * + * The verifier register to entity using {@link TopiaEntity#addPropertyChangeListener(PropertyChangeListener)}. + * So modification have to be done on current entity. + * + * To check for embedded entity, add it too. + * + * Remove all entity with key + * + * @param currentEntity entity to check + * @param key specific key (defaut to topiaId) + */ + public void addCurrentEntity(TopiaEntity currentEntity, String key) { + if (currentEntity != null) { + editable = true; + isisContext = currentEntity.getTopiaContext(); + currentEntity + .addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (log.isDebugEnabled()) { + log.debug("PropertyChanged : " + + evt.getPropertyName() + + " New Value : " + evt.getNewValue()); + } + topiaChanged(); + } + }); + // chatellier 20090602 , pas sur du code suivant + // plutot ne rien faire, si une autre entite de la meme + // clé est ajoutée, elle sera ecrasée + //TopiaEntity entity = getEntity(currentEntity.getClass()); + //if (entity != null) { + // currentEntities.remove(entity); + //} + + this.currentEntities.put(key, currentEntity); + setPanelsActifs(); + } + } + + /** + * Add entity to check for modification. + * + * The verifier register to entity using {@link TopiaEntity#addPropertyChangeListener(PropertyChangeListener)}. + * So modification have to be done on current entity. + * + * To check for embedded entity, add it too. + * + * Remove all entity with key + * + * @param currentEntity entity to check + */ + public void addCurrentEntity(TopiaEntity currentEntity) { + if (currentEntity != null) { + addCurrentEntity(currentEntity, currentEntity.getTopiaId()); + } + } + + public void reset() { + removeAllEntity(); + removeAllPanels(); + this.currentCancelButton = null; + this.currentDeleteButton = null; + this.currentNewButton = null; + this.currentSaveButton = null; + this.currentOnglet = null; + this.currentNode = null; + } + + public void removeAllEntity() { + currentEntities.clear(); + editable = false; + noModif(); + setPanelsActifs(); + } + + public void addCurrentPanel(InputContentUI... panels) { + for (InputContentUI ui : panels) { + editable = !currentEntities.isEmpty(); + this.currentPanels.add(ui); + if (rootUI == null) { + ui.setSensitivity(true); + ui.setLayer(true); + } + ui.refresh(); + // do not call refresh action buttons here + ui.setActif(editable); + } + } + + public void removeAllPanels() { + currentPanels.clear(); + } + + public boolean isEditable() { + return editable; + } + + public void setSaveButton(JButton saveButton) { + setSaveButton(saveButton, true); + } + + public void setSaveButton(JButton saveButton, Boolean listener) { + if (listener) { + // TODO what is it for (remove/readd) ? + saveButton.removeActionListener(saveListener); + saveButton.addActionListener(saveListener); + } + saveButton.setEnabled(changed); + saveButton.setText(_("isisfish.common.save")); + this.currentSaveButton = saveButton; + } + + public void setNewButton(JButton saveButton, String name) { + setNewButton(saveButton, name, true); + } + + public void setNewButton(JButton newButton, String t, Boolean listener) { + if (listener) { + // TODO what is it for (remove/readd) ? + newButton.removeActionListener(newListener); + newButton.addActionListener(newListener); + } + newButton.setText(_("isisfish.common.new")); + newButton.setEnabled(!changed); + this.type = t; + this.currentNewButton = newButton; + } + + public void setCancelButton(JButton cancelButton) { + cancelButton.removeActionListener(cancelListener); + cancelButton.addActionListener(cancelListener); + cancelButton.setText(_("isisfish.common.cancel")); + cancelButton.setEnabled(changed); + this.currentCancelButton = cancelButton; + } + + public void setDeleteButton(JButton deleteButton) { + setDeleteButton(deleteButton, true); + } + + public void setDeleteButton(JButton deleteButton, boolean listener) { + if (listener) { + deleteButton.removeActionListener(deleteListener); + deleteButton.addActionListener(deleteListener); + } + deleteButton.setEnabled(editable); + deleteButton.setText(_("isisfish.common.remove")); + this.currentDeleteButton = deleteButton; + } + + public TopiaContext getIsisContext() { + return isisContext; + } + + public Collection<TopiaEntity> getCurrentEntities() { + return currentEntities.values(); + } + + public <E extends TopiaEntity> E getEntity(Class<E> clazz, String key) { + return (E) currentEntities.get(key); + } + + public <E extends TopiaEntity> E getEntity(Class<E> clazz) { + for (TopiaEntity te : currentEntities.values()) { + if (clazz.isInstance(te)) { + return (E) te; + } + } + return null; + } + + public String getCurrentOnglet() { + return currentOnglet; + } + + public NavigationTreeNode getCurrentNode() { + return currentNode; + } + + public void setIsisContext(TopiaContext isisContext) { + this.isisContext = isisContext; + } + + public void setEditable(boolean editable) { + this.editable = editable; + } + + public void setCurrentOnglet(String currentOnglet) { + this.currentOnglet = currentOnglet; + } + + public void setCurrentNode(NavigationTreeNode currentNode) { + this.currentNode = currentNode; + } + + protected void setRootPanel(InputUI inputUI) { + this.rootUI = inputUI; + } + + public SensitivityTabUI getSensPanel() { + return sensUI; + } + + public void setSensPanel(SensitivityTabUI sensUI) { + this.sensUI = sensUI; + } +} Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,198 +0,0 @@ -<!-- -/* *##% - * Copyright (C) 2005 - 2009 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 published by the Free Software Foundation; either version 2 - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ ---> -<fr.ifremer.isisfish.ui.input.InputContentUI> - - <!-- bean property --> - <fr.ifremer.isisfish.entities.PopulationImpl id='bean' javaBean='null'/> - <fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl id='popInfo' javaBean='null'/> - - <Boolean id="selectedPopulationSeasonInfo" javaBean='false' /> - - <script><![CDATA[ - -import fr.ifremer.isisfish.entities.PopulationSeasonInfo; -import fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl; -import fr.ifremer.isisfish.entities.Population; -import fr.ifremer.isisfish.entities.PopulationImpl; -import fr.ifremer.isisfish.ui.input.population.PopulationSeasonInfoComboModel; -import fr.ifremer.isisfish.ui.input.population.PopulationSeasonInfoComboRenderer; - -addPropertyChangeListener("bean", new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getOldValue() != null || evt.getNewValue() == null) { - fieldPopulationMigrationComment.setText(""); - fieldUseEquationMigration.setSelected(false); - } - /*if (evt.getNewValue() != null) { - - }*/ - } -}); - - at Override -public void refresh() { - Population population = getVerifier().getEntity(Population.class); - - // add null before, for second to be considered as a changed event - // otherwize, setBean has no effect - setBean(null); - setBean((PopulationImpl) population); - - // refresh psi list in combo box - PopulationSeasonInfoComboModel model = (PopulationSeasonInfoComboModel)fieldPopulationMigrationSeasonChooser.getModel(); - if (getBean() != null) { - PopulationSeasonInfo previousSelected = (PopulationSeasonInfo)model.getSelectedItem(); - model.setPopulationSeasonInfos(getBean().getPopulationSeasonInfo()); - - // do this to keep selected after cancel/refresh - if (previousSelected != null) { - for (PopulationSeasonInfo psi : getBean().getPopulationSeasonInfo()) { - if (psi.getTopiaId().equals(previousSelected.getTopiaId())) { - model.setSelectedItem(psi); - } - } - } - - seasonChanged(); - } - else { - model.setPopulationSeasonInfos(null); - } - - getVerifier().addCurrentPanel(populationMigrationEquationUI, populationMigrationMigrationUI, populationMigrationImmigrationUI, populationMigrationEmigrationUI); - // addCurrentPanel set all to isActif() - // force it to isSelectedPopulationSeasonInfo() - // twice for real change event :( - setSelectedPopulationSeasonInfo(fieldPopulationMigrationSeasonChooser.getModel().getSelectedItem() == null); - setSelectedPopulationSeasonInfo(fieldPopulationMigrationSeasonChooser.getModel().getSelectedItem() != null); -} - - at Override -public void setActionButtons() { - getVerifier().setSaveButton(save); - getVerifier().setCancelButton(cancel); -} - -protected void seasonChanged() { - PopulationSeasonInfoComboModel model = (PopulationSeasonInfoComboModel)fieldPopulationMigrationSeasonChooser.getModel(); - PopulationSeasonInfo selectedPSI = (PopulationSeasonInfo)model.getSelectedItem(); - setPopInfo((PopulationSeasonInfoImpl)selectedPSI); - if (getPopInfo() != null) { - getVerifier().addCurrentEntity(getPopInfo()); - populationMigrationEquationUI.init(getPopInfo()); - populationMigrationMigrationUI.init(getPopInfo()); - populationMigrationImmigrationUI.init(getPopInfo()); - populationMigrationEmigrationUI.init(getPopInfo()); - - setSelectedPopulationSeasonInfo(isActif()); - } - else { - setSelectedPopulationSeasonInfo(false); - } - refreshHidablePanel(); -} -protected void useEquationChanged() { - getPopInfo().setUseEquationMigration(fieldUseEquationMigration.isSelected()); - refreshHidablePanel(); -} -protected void refreshHidablePanel() { - if (getPopInfo() != null) { - if (getPopInfo().getUseEquationMigration()) { - fieldUseEquationMigration.setSelected(true); - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "fieldUseEquation"); - } - else { - fieldUseEquationMigration.setSelected(false); - ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "fieldUseMatrix"); - } - } -} - ]]> - </script> - <Table id='body'> - <row> - <cell anchor='east'> - <JLabel text="isisfish.populationMigration.selectSeason" enabled='{isActif()}'/> - </cell> - <cell fill='horizontal' weightx='1.0'> - <JComboBox id="fieldPopulationMigrationSeasonChooser" - model='{new PopulationSeasonInfoComboModel()}' - renderer="{new PopulationSeasonInfoComboRenderer()}" - onActionPerformed='seasonChanged()' - enabled='{isActif()}'/> - </cell> - </row> - <row> - <cell columns='2' anchor='west'> - <JCheckBox id="fieldUseEquationMigration" selected='{getPopInfo().getUseEquationMigration()}' - text="isisfish.populationMigration.useEquation" onActionPerformed='useEquationChanged()' enabled='{isSelectedPopulationSeasonInfo()}' decorator='boxed'/> - </cell> - </row> - <row> - <cell columns='2' fill='both' weightx='1.0' weighty='0.7'> - <JPanel id="hidablePanel" layout='{new CardLayout()}'> - <JTabbedPane id="fieldUseMatrix" constraints='"fieldUseMatrix"' enabled='{isSelectedPopulationSeasonInfo()}'> - <tab title='{_("isisfish.populationMigrationMigration.title")}'> - <PopulationMigrationMigrationUI id="populationMigrationMigrationUI" constructorParams='this' decorator='boxed' - _bean='{PopulationSeasonInfoImpl.class}' _method='"MigrationMatrix"' actif='{isSelectedPopulationSeasonInfo()}' /> - </tab> - <tab title='{_("isisfish.populationMigrationImmigration.title")}'> - <PopulationMigrationImmigrationUI id="populationMigrationImmigrationUI" constructorParams='this' decorator='boxed' - _bean='{PopulationSeasonInfoImpl.class}' _method='"ImmigrationMatrix"' actif='{isSelectedPopulationSeasonInfo()}' /> - </tab> - <tab title='{_("isisfish.populationMigrationEmigration.title")}'> - <PopulationMigrationEmigrationUI id="populationMigrationEmigrationUI" constructorParams='this' decorator='boxed' - _bean='{PopulationSeasonInfoImpl.class}' _method='"EmigrationMatrix"' actif='{isSelectedPopulationSeasonInfo()}' /> - </tab> - </JTabbedPane> - <PopulationMigrationEquationUI id='populationMigrationEquationUI' constraints='"fieldUseEquation"' constructorParams='this' - actif='{isSelectedPopulationSeasonInfo()}' /> - </JPanel> - </cell> - </row> - <row> - <cell anchor='east'> - <JLabel text="isisfish.populationMigration.comments" enabled='{isSelectedPopulationSeasonInfo()}'/> - </cell> - <cell fill='both' weightx='1.0' weighty='0.3'> - <JScrollPane> - <!-- comment can be null jaxx.runtime.SwingUtil.getStringValue() --> - <JTextArea id="fieldPopulationMigrationComment" text='{jaxx.runtime.SwingUtil.getStringValue(getBean().getMigrationComment())}' - onKeyReleased='getBean().setMigrationComment(fieldPopulationMigrationComment.getText())' - enabled='{isSelectedPopulationSeasonInfo()}' decorator='boxed'/> - </JScrollPane> - </cell> - </row> - <row> - <cell columns='2' fill='horizontal' weightx='1.0'> - <Table> - <row> - <cell fill='horizontal' weightx='0.5'> - <JButton id='save' decorator='boxed'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JButton id='cancel' decorator='boxed'/> - </cell> - </row> - </Table> - </cell> - </row> - </Table> -</fr.ifremer.isisfish.ui.input.InputContentUI> Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx (from rev 2481, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/java/fr/ifremer/isisfish/ui/input/PopulationMigrationUI.jaxx 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,198 @@ +<!-- +/* *##% + * Copyright (C) 2005 - 2009 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 published by the Free Software Foundation; either version 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ +--> +<fr.ifremer.isisfish.ui.input.InputContentUI> + + <!-- bean property --> + <fr.ifremer.isisfish.entities.PopulationImpl id='bean' javaBean='null'/> + <fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl id='popInfo' javaBean='null'/> + + <Boolean id="selectedPopulationSeasonInfo" javaBean='false' /> + + <script><![CDATA[ + +import fr.ifremer.isisfish.entities.PopulationSeasonInfo; +import fr.ifremer.isisfish.entities.PopulationSeasonInfoImpl; +import fr.ifremer.isisfish.entities.Population; +import fr.ifremer.isisfish.entities.PopulationImpl; +import fr.ifremer.isisfish.ui.input.population.PopulationSeasonInfoComboModel; +import fr.ifremer.isisfish.ui.input.population.PopulationSeasonInfoComboRenderer; + +addPropertyChangeListener("bean", new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getOldValue() != null || evt.getNewValue() == null) { + fieldPopulationMigrationComment.setText(""); + fieldUseEquationMigration.setSelected(false); + } + /*if (evt.getNewValue() != null) { + + }*/ + } +}); + + at Override +public void refresh() { + Population population = getVerifier().getEntity(Population.class); + + // add null before, for second to be considered as a changed event + // otherwize, setBean has no effect + setBean(null); + setBean((PopulationImpl) population); + + // refresh psi list in combo box + PopulationSeasonInfoComboModel model = (PopulationSeasonInfoComboModel)fieldPopulationMigrationSeasonChooser.getModel(); + if (getBean() != null) { + PopulationSeasonInfo previousSelected = (PopulationSeasonInfo)model.getSelectedItem(); + model.setPopulationSeasonInfos(getBean().getPopulationSeasonInfo()); + + // do this to keep selected after cancel/refresh + if (previousSelected != null) { + for (PopulationSeasonInfo psi : getBean().getPopulationSeasonInfo()) { + if (psi.getTopiaId().equals(previousSelected.getTopiaId())) { + model.setSelectedItem(psi); + } + } + } + + seasonChanged(); + } + else { + model.setPopulationSeasonInfos(null); + } + + getVerifier().addCurrentPanel(populationMigrationEquationUI, populationMigrationMigrationUI, populationMigrationImmigrationUI, populationMigrationEmigrationUI); + // addCurrentPanel set all to isActif() + // force it to isSelectedPopulationSeasonInfo() + // twice for real change event :( + setSelectedPopulationSeasonInfo(fieldPopulationMigrationSeasonChooser.getModel().getSelectedItem() == null); + setSelectedPopulationSeasonInfo(fieldPopulationMigrationSeasonChooser.getModel().getSelectedItem() != null); +} + + at Override +public void setActionButtons() { + getVerifier().setSaveButton(save); + getVerifier().setCancelButton(cancel); +} + +protected void seasonChanged() { + PopulationSeasonInfoComboModel model = (PopulationSeasonInfoComboModel)fieldPopulationMigrationSeasonChooser.getModel(); + PopulationSeasonInfo selectedPSI = (PopulationSeasonInfo)model.getSelectedItem(); + setPopInfo((PopulationSeasonInfoImpl)selectedPSI); + if (getPopInfo() != null) { + getVerifier().addCurrentEntity(getPopInfo()); + populationMigrationEquationUI.init(getPopInfo()); + populationMigrationMigrationUI.init(getPopInfo()); + populationMigrationImmigrationUI.init(getPopInfo()); + populationMigrationEmigrationUI.init(getPopInfo()); + + setSelectedPopulationSeasonInfo(isActif()); + } + else { + setSelectedPopulationSeasonInfo(false); + } + refreshHidablePanel(); +} +protected void useEquationChanged() { + getPopInfo().setUseEquationMigration(fieldUseEquationMigration.isSelected()); + refreshHidablePanel(); +} +protected void refreshHidablePanel() { + if (getPopInfo() != null) { + if (getPopInfo().getUseEquationMigration()) { + fieldUseEquationMigration.setSelected(true); + ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "fieldUseEquation"); + } + else { + fieldUseEquationMigration.setSelected(false); + ((CardLayout) hidablePanel.getLayout()).show(hidablePanel, "fieldUseMatrix"); + } + } +} + ]]> + </script> + <Table id='body'> + <row> + <cell anchor='east'> + <JLabel text="isisfish.populationMigration.selectSeason" enabled='{isActif()}'/> + </cell> + <cell fill='horizontal' weightx='1.0'> + <JComboBox id="fieldPopulationMigrationSeasonChooser" + model='{new PopulationSeasonInfoComboModel()}' + renderer="{new PopulationSeasonInfoComboRenderer()}" + onActionPerformed='seasonChanged()' + enabled='{isActif()}'/> + </cell> + </row> + <row> + <cell columns='2' anchor='west'> + <JCheckBox id="fieldUseEquationMigration" selected='{getPopInfo().getUseEquationMigration()}' + text="isisfish.populationMigration.useEquation" onActionPerformed='useEquationChanged()' enabled='{isSelectedPopulationSeasonInfo()}' decorator='boxed'/> + </cell> + </row> + <row> + <cell columns='2' fill='both' weightx='1.0' weighty='0.7'> + <JPanel id="hidablePanel" layout='{new CardLayout()}'> + <JTabbedPane id="fieldUseMatrix" constraints='"fieldUseMatrix"' enabled='{isSelectedPopulationSeasonInfo()}'> + <tab title='{_("isisfish.populationMigrationMigration.title")}'> + <PopulationMigrationMigrationUI id="populationMigrationMigrationUI" constructorParams='this' decorator='boxed' + _bean='{PopulationSeasonInfoImpl.class}' _method='"MigrationMatrix"' actif='{isSelectedPopulationSeasonInfo()}' /> + </tab> + <tab title='{_("isisfish.populationMigrationImmigration.title")}'> + <PopulationMigrationImmigrationUI id="populationMigrationImmigrationUI" constructorParams='this' decorator='boxed' + _bean='{PopulationSeasonInfoImpl.class}' _method='"ImmigrationMatrix"' actif='{isSelectedPopulationSeasonInfo()}' /> + </tab> + <tab title='{_("isisfish.populationMigrationEmigration.title")}'> + <PopulationMigrationEmigrationUI id="populationMigrationEmigrationUI" constructorParams='this' decorator='boxed' + _bean='{PopulationSeasonInfoImpl.class}' _method='"EmigrationMatrix"' actif='{isSelectedPopulationSeasonInfo()}' /> + </tab> + </JTabbedPane> + <PopulationMigrationEquationUI id='populationMigrationEquationUI' constraints='"fieldUseEquation"' constructorParams='this' + actif='{isSelectedPopulationSeasonInfo()}' /> + </JPanel> + </cell> + </row> + <row> + <cell anchor='east'> + <JLabel text="isisfish.populationMigration.comments" enabled='{isActif()}'/> + </cell> + <cell fill='both' weightx='1.0' weighty='0.3'> + <JScrollPane> + <!-- comment can be null jaxx.runtime.SwingUtil.getStringValue() --> + <JTextArea id="fieldPopulationMigrationComment" text='{jaxx.runtime.SwingUtil.getStringValue(getBean().getMigrationComment())}' + onKeyReleased='getBean().setMigrationComment(fieldPopulationMigrationComment.getText())' + enabled='{isActif()}' decorator='boxed'/> + </JScrollPane> + </cell> + </row> + <row> + <cell columns='2' fill='horizontal' weightx='1.0'> + <Table> + <row> + <cell fill='horizontal' weightx='0.5'> + <JButton id='save' decorator='boxed'/> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JButton id='cancel' decorator='boxed'/> + </cell> + </row> + </Table> + </cell> + </row> + </Table> +</fr.ifremer.isisfish.ui.input.InputContentUI> Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,1111 +0,0 @@ -Add\ to\ %s\ queue= -Add\ to\ default\ queue= -Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s= -Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s -Can't\ add\ simulation\:\ = -Can't\ create\ simulation\ logger=Can't create simulation logger -Can't\ delete\ simulation\ %s\ = -Can't\ do\ post\ action\ %s= -Can't\ do\ simulation\ %s= -Can't\ download\ archive\ \:\ %s= -Can't\ download\ file= -Can't\ evaluate\ simulation\ prescript= -Can't\ export\ simulation\ %s= -Can't\ get\ changlog= -Can't\ get\ result\:\ %1$s=Can't get result\: %1$s -Can't\ instanciate\ export\ %1$s=Can't instanciate export %1$s -Can't\ instanciate\ wanted\ VCS\ (%s),\ use\ default= -Can't\ instantiate\ %s= -Can't\ open\ log\ for\ %s= -Can't\ read\ ssh\ key\ \:\ %s= -Can't\ simulate\ %s= -Check\ state\ of\ local\ repository\:\ %s= -Check\ syntax\ of\ the\ current\ script= -Checkout\ pom.xml\ to\ %s= -Command\ '%s'\ fail\ to\ execute= -Commit\ script\ to\ CVS\ server= -Copy\ current\ selection\ (Ctrl-c)= -Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s= -Create\ a\ new\ script= -Cut\ current\ selection\ (Ctrl-x)= -Error\ during\ vcs\ initialisation= -Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys= -Export\ selected\ script(s)\ to\ zip\ archive= -Generate\ next\ simulation= -Import\ one\ java\ file\ script\ source= -Import\ simulation\ file\ %s\ in\ directory\ %s\ and\ rename\ from\ %s\ to\ %s= -Import\ zipped\ file\ containing\ all\ scripts\ directory\ structure= -Info=Info -Jobs\ submited\ is\ not\ ItemSimulation\ but\ was\ %s= -Last\ entry\ was\ %s\ extract\ name\ %s= -Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)= -Local\ repository\ don't\ exist= -Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s= -Normal\ stop\ thread,\ this\ is\ not\ an\ error= -Not\ start\ simulation\ %s\ because\ user\ ask\ stop= -Paste\ current\ selection\ (Ctrl-v)= -Process\ template\ error= -Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= -Region\ %s\ already\ inited= -Remote\ IsisFish\ server= -Remote\ control\ file\ doesn't\ exists\ %s= -Remote\ information\ file\ doesn't\ exists\ %s= -Rename\ data\ directory\ to\ %s= -Save\ current\ script= -Show\ help= -SimulationExecutor\ started\ with\ %s\ thread\ for\ %s= -Ssh\ key\ found\ '%s'\ will\ be\ used\ to\ connect\ to= -Stop\ simulation\ plan,\ because\ can't\ call\ afterSimulation\ correctly\ on\ plan\ %s= -Stop\ the\ process= -SubProcess\ start\:\ %s\ %s= -Switch\ repository\ type\ to\ none= -Try\ to\ eval\ current\ script\ (must\ be\ have\ main\ method)= -Try\ to\ log\ on\ %s@%s\:%d= -Use\ branches,\ switch\ not\ needed= -User\ restart\ simulation\ %s= -User\ stop\ simulation\ %s= -could\ not\ close\ reader\ %1$s=could not close reader %1$s -could\ not\ create\ simulation\ filter\ model\ for\ reason\ %1$s=could not create simulation filter model for reason %1$s -could\ not\ filter\ on\ simulations=could not filter on simulations -could\ not\ found\ %s= -could\ not\ found\ log\ file\ %1$s=could not found log file %1$s -could\ not\ found\ region\ %s= -could\ not\ found\ simulation\ %s= -could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s -destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= -destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite= -directory\ %s\ must\ be\ a\ directory= -filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines. -in\ hour= -isisfish.about.abouthtmltext=<html><b>Isis-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2009.<br /><br /><a href\="http\://isis-fish.labs.libre-entreprise.org">http\://isis-fish.labs.libre-entreprise.org</a><br /><br />Please, report any bug you can found.<html> -isisfish.about.licensetext=You can modify and redistribute the program under the conditions of the GNU General Public License (version 2 or later). A copy of the GPL is in the file "LICENSE.txt" provided with Isis-Fish. All rights reserved. No guarantees are provided for use of this program. -isisfish.about.title=About Isis-Fish... -isisfish.advancedParameters.title=Advanced parameters -isisfish.advancedParams.freeParameters=Free parameters -isisfish.advancedParams.libLevelLogger=Library log level -isisfish.advancedParams.scriptLevelLogger=Script log level -isisfish.advancedParams.simulLevelLogger=Simulator log level -isisfish.advancedParams.simulationCache=Simulation cache -isisfish.advancedParams.simulationStatistique=Simulation statistics -isisfish.advancedParams.simulatorUse=Simulator to Use -isisfish.cell.comments=Comments -isisfish.cell.land=Land -isisfish.cell.latitude=Latitude -isisfish.cell.longitude=Longitude -isisfish.cell.name=Name -isisfish.change.equation=Can't change equation -isisfish.commit.message=Enter commit message -isisfish.common.add=Add -isisfish.common.add.short=add -isisfish.common.alert=alert -isisfish.common.apply=Apply -isisfish.common.blank=\ -isisfish.common.cancel=Cancel -isisfish.common.check=Check -isisfish.common.clear=Clear -isisfish.common.date=Date -isisfish.common.debug=debug -isisfish.common.delete=Delete -isisfish.common.ellipsis=... -isisfish.common.emigration=Emigration -isisfish.common.equation=Equation -isisfish.common.error=error -isisfish.common.finish=Finish -isisfish.common.gear=Gear -isisfish.common.immigration=immigration -isisfish.common.info=info -isisfish.common.migration=migration -isisfish.common.month=month %1$s -isisfish.common.name=Name -isisfish.common.new=new -isisfish.common.newMatrix=New matrix -isisfish.common.next=Next -isisfish.common.ok=Ok -isisfish.common.openEditor=Open editor -isisfish.common.population=Population -isisfish.common.populationGroup=Population group -isisfish.common.populations=Populations -isisfish.common.port=port -isisfish.common.prev=Previous -isisfish.common.region=Region -isisfish.common.remove=Remove -isisfish.common.reset=Reset -isisfish.common.rules=Rules -isisfish.common.save=Save -isisfish.common.saveModel=Save as model -isisfish.common.saveNextSimulation=Save for next simulation -isisfish.common.season=Season -isisfish.common.setOfVessels=Set of vessels -isisfish.common.simulate=Simulate -isisfish.common.stop=Stop -isisfish.common.strategies=Strategies -isisfish.common.sum=Sum -isisfish.common.tag=Tag -isisfish.common.tripType=Trip type -isisfish.common.valid=Valid -isisfish.common.value=Value -isisfish.common.warn=warn -isisfish.common.year=year -isisfish.common.zone=Zone -isisfish.config.database.lockmode.description= -isisfish.config.main.compileDirectory.description= -isisfish.config.main.configFileName.description= -isisfish.config.main.defaultBackupDirectory.description= -isisfish.config.main.defaultExportDirectory.description= -isisfish.config.main.defaultExportNames.description= -isisfish.config.main.defaultMapFile.description= -isisfish.config.main.defaultResultNames.description= -isisfish.config.main.defaultSimulator.description= -isisfish.config.main.defaultTagValue.description= -isisfish.config.main.encoding.description=encoding used on system -isisfish.config.main.javadocDirectory.description= -isisfish.config.main.javadocURL.description= -isisfish.config.main.launchUI.description= -isisfish.config.main.localSimulator.description= -isisfish.config.main.locale.description=user locale -isisfish.config.main.login.description= -isisfish.config.main.password.description= -isisfish.config.main.projectName.description=name of project -isisfish.config.main.regionMap.description= -isisfish.config.main.remoteCaparmor.description= -isisfish.config.main.resultExport.description= -isisfish.config.main.simulation.max.simultaneous.simulation=Simultaneous simulation -isisfish.config.main.simulation.max.simultaneous.simulation.description=Simultaneous simulation to do on Caparmor -isisfish.config.main.simulation.ssh.control.check.interval=Control check interval (seconds) -isisfish.config.main.simulation.ssh.control.check.interval.description=Control check interval (seconds) -isisfish.config.main.simulation.ssh.datapath=Isis-Fish database -isisfish.config.main.simulation.ssh.datapath.description=Isis-Fish database path -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.pbsbinpath=PBS executables directory -isisfish.config.main.simulation.ssh.pbsbinpath.description=PBS executables (qsub, qdel...) directory -isisfish.config.main.simulation.ssh.server=Server address -isisfish.config.main.simulation.ssh.server.description=Server adress -isisfish.config.main.simulation.ssh.tmppath=Server temp directory -isisfish.config.main.simulation.ssh.tmppath.description=Server temp directory -isisfish.config.main.simulation.ssh.userhome=User home directory -isisfish.config.main.simulation.ssh.userhome.description=User home directory -isisfish.config.main.simulation.ssh.username=SSH identifier -isisfish.config.main.simulation.ssh.username.description=SSH identifier -isisfish.config.main.simulationServer.description= -isisfish.config.main.simulationShowOnlyError.description= -isisfish.config.main.simulationShowOnlyQueue.description= -isisfish.config.main.smtpServer.description= -isisfish.config.main.subSimulator.description= -isisfish.config.main.userMail.description= -isisfish.config.main.userName.description= -isisfish.config.ssh.key.file=SSH key -isisfish.config.ssh.key.file.description=Private SSH key path -isisfish.config.vcs.hostName.description= -isisfish.config.vcs.keyFile.description= -isisfish.config.vcs.localDatabasePath.description= -isisfish.config.vcs.noPassPhrase.description= -isisfish.config.vcs.passphrase.description= -isisfish.config.vcs.remoteDatabase.description= -isisfish.config.vcs.remotePath.description= -isisfish.config.vcs.type.description= -isisfish.config.vcs.typeRepo.description= -isisfish.config.vcs.useSshConnexion.description= -isisfish.config.vcs.userName.description= -isisfish.config.vcs.userPassword.description= -isisfish.dataResult.descriptionLabel=defaultToolTip-fr.ifremer.resultat.DataResult.descriptionLabel -isisfish.dataResult.export.csv=Export to CSV -isisfish.dataResult.exportButton=defaultToolTip-fr.ifremer.resultat.DataResult.exportButton -isisfish.dataResult.label=label9 -isisfish.dataResult.matriceTable=defaultToolTip-fr.ifremer.resultat.DataResult.matriceTable -isisfish.dataResult.scrolledwindow2=defaultToolTip-fr.ifremer.resultat.DataResult.scrolledwindow2 -isisfish.dataResult.table2=defaultToolTip-fr.ifremer.resultat.DataResult.table2 -isisfish.date.toString=%1$s %2$s -isisfish.effortDescription.crewFoodCost=Crew food cost -isisfish.effortDescription.crewShareRate=Crew share rate -isisfish.effortDescription.crewSize=Crew size -isisfish.effortDescription.economicTitle=\u00C9conomiques parameters -isisfish.effortDescription.effortTitle=Fishing effort parameters -isisfish.effortDescription.fishingOperation=Fishing operation -isisfish.effortDescription.fishingOperationDuration=Fishing operation duration -isisfish.effortDescription.fishingOperationDuration.tooltip=In hours -isisfish.effortDescription.fixedCrewSalary=Fixed crew salary -isisfish.effortDescription.gearsNumberPerOperation=Gears number per operation -isisfish.effortDescription.landingCosts=Landing costs -isisfish.effortDescription.otherRunningCost=Other running cost -isisfish.effortDescription.parametersTitle=M\u00E9tiers parameters -isisfish.effortDescription.repairAndMaintenanceGearCost=Repair and maintenance gear cost -isisfish.effortDescription.title=Practiced metier -isisfish.effortDescription.toString=EffortDescription for %1$s with %2$s -isisfish.effortDescription.unitCostOfFishing=Fishing unit cost -isisfish.equation.editor.title=Equation Editor -isisfish.error.acceptable.population=New value isn't acceptable value for this population -isisfish.error.add.card=Error while adding of result to the map. -isisfish.error.add.logger.simulation=isisfish.error.add.logger.simulation -isisfish.error.add.result.data=Error while adding result ot data. -isisfish.error.add.result.graph=Error while adding result to graph -isisfish.error.add.tray=Can't add system tray icon -isisfish.error.change.classloader=Can't change classloader because can't create URL from file %1$s -isisfish.error.change.equation=Can't change equation -isisfish.error.check.region= -isisfish.error.compile.fileerror=File %s can't be compiled \! -isisfish.error.compile.script=Can't compile script\: %1$s -isisfish.error.compiled.parameter=Can't get rule parameter from compiled class -isisfish.error.conversion.data=Erreur lors de la conversion du fichier de donn\u00E9es -isisfish.error.create.equation=Can't create equation -isisfish.error.delete.database=Can't delete database -isisfish.error.delete.file=could not delete file %1$s -isisfish.error.delete.vcs.files=Can't delete vcs files -isisfish.error.during.simulation=Error during simulation -isisfish.error.emigration.negative=emigration negative -isisfish.error.empty.code.rubbin=rubbin's code is empty -isisfish.error.empty.emigration=emigration empty -isisfish.error.empty.id.geographic=goegraphic identifier is empty -isisfish.error.empty.immigration=immigration empty -isisfish.error.empty.migration=Migration empty -isisfish.error.empty.name=The name is empty -isisfish.error.empty.params.name=Parameter name is empty -isisfish.error.empty.population=Population is empty -isisfish.error.empty.scientific.name=scentific name is empty -isisfish.error.empty.season=info season empty -isisfish.error.empty.selectivity=selectivity is empty -isisfish.error.empty.species=specie capturable empty -isisfish.error.empty.species.name=specie's name is empty -isisfish.error.empty.unit=measure unit is empty -isisfish.error.equation.return.number=EquationImpl must retun a number\: %1$s -isisfish.error.evaluate.equation=Can't evaluate equation\: %1$s -isisfish.error.evaluate.preplan.script= -isisfish.error.evalute.plan.script=Can't evaluate plan script -isisfish.error.factor.invalid=Factor is not valid -isisfish.error.file.already.exists=The file %1$s already exist -isisfish.error.get.fisheryRegion=Can't get FisheryRegion -isisfish.error.growth.equation.before.create.group.population=Error, You must input growth equation before create the group population -isisfish.error.immigration.negative=immigration negative -isisfish.error.import.convertible=Erreur lors de l'import, la version du fichier que vous souhaitez importer n'est pas transformable en une version importable. -isisfish.error.import.file=Can't import file %1$s -isisfish.error.import.recent.files=Erreur lors de l'import, la version du fichier que vous souhaitez importer est plus r\u00E9cente que la version souhait\u00E9e. -isisfish.error.init.map=Can't init map. -isisfish.error.init.remove.button=could not init remove button (button or list is null) button \: %1$s, list \: %2$s -isisfish.error.instanciate=Can't instanciate %1$s -isisfish.error.instanciate.export=Can't instanciate export %1$s -isisfish.error.invalid.costs.fix=les co\u00FBts fixes sont invalides -isisfish.error.invalid.distribution.recruitment=distribution de recrutement invalide -isisfish.error.invalid.equation=Equation invalid -isisfish.error.invalid.equation.name=Invalid equation name -isisfish.error.invalid.file.name=The script name %1$s is not valid. -isisfish.error.invalid.interval.reproduction.recruitment=interval entre la reproduction et le recrutement invalide -isisfish.error.invalid.mean.weight=poids moyen invalide -isisfish.error.invalid.natural.death=natural mortality on classes naissantes invalide -isisfish.error.invalid.number=the number is invalid -isisfish.error.invalid.range=La gamme possible n'a pas de valeur acceptable -isisfish.error.invalid.values.params=Parametre controlable hors valeurs possibles -isisfish.error.invalidate.natural.death=natural mortality invalid -isisfish.error.invoke.method=Can't invoke method '%1$s' for class %2$s -isisfish.error.linkageerror.message=Isis-Fish has detected a script use error.\nCompilation directory has been deleted to force recompilation.\n\nPlease, restart Isis-Fish. -isisfish.error.linkageerror.title=Init error -isisfish.error.load.class=Can't load class\: %1$s -isisfish.error.load.classloader=Can't create ClassLoader for script, bad directory\: %1$s for reason %2$s -isisfish.error.load.file=could not load file %1$s -isisfish.error.load.map=Can't load map file\: %1$s -isisfish.error.log.closeAppender=could not close appender %1$s for category %2$s -isisfish.error.log.console.dispose=Une erreur est survenue pendant la fermeture de la console %1$s de log, raison %2$s -isisfish.error.log.createAppender=could not create appender [%1$s] \: %2$s for reason %3$s -isisfish.error.log.foundAppender=\=could not found log appender %1$s for category %2$s -isisfish.error.matrix.more.2d=Matrice de plus de 2 dimensions\!\!\nS\u00E9lectionnez moins d'\u00E9l\u00E9ments ou utilisez l'op\u00E9rateur somme. -isisfish.error.migration.negative=Migration negative -isisfish.error.no.matrix=No matrix for\: -isisfish.error.no.null.time.step=Error, the time step should not be null -isisfish.error.no.sector=No sector defined -isisfish.error.no.select.simulation=could not select simulation -isisfish.error.no.target.species=no target species in %1$s for %2$s -isisfish.error.not.found.code=could not found codeclass for %1$s -isisfish.error.not.found.description=could not found description for %1$s -isisfish.error.not.found.field=could not found field %1$s doc for %2$s -isisfish.error.not.found.field.class=could not found field %1$s for class %2$s -isisfish.error.not.null.class.grown=classe mature vaut nul -isisfish.error.not.null.mean.weight=poids moyen nul -isisfish.error.not.null.natiral.death=natural mortality null -isisfish.error.not.possible.metier=Pas de m\u00E9tier possible -isisfish.error.not.support.class=this class does not support -isisfish.error.number.classes.upper.zero=Error, the number of classes must be upper than 0 -isisfish.error.obtain.analyseplan=Can't obtain description of AnalysePlan -isisfish.error.obtain.doc.export=Can't obtain @Doc on class export -isisfish.error.obtain.doc.resultName=Can't obtain @Doc on ResultName -isisfish.error.obtain.doc.rule=Can't obtain description for a Rule class -isisfish.error.obtain.field=Can't obtain field @Doc for Rule %1$s -isisfish.error.obtain.field.analyseplan=Can't obtain field @Doc for AnalysePlan %1$s -isisfish.error.obtain.field.export=Can't obtain field @Doc for Export %1$s -isisfish.error.obtain.field.sensitivitycalculator=Can't obtain field @Doc for Calculator %1$s -isisfish.error.out.memory=Out of memory try with more memory (option -mx) -isisfish.error.overlap.season=Cette saison chevauche une autre saison -isisfish.error.parse.date=Can't parse date %1$s -isisfish.error.parse.long=Can't parse long %1$s -isisfish.error.plan.parameter=Can't get plan parameter from compiled class -isisfish.error.prepare.data=Can't prepare data -isisfish.error.prepare.information.simulation=Can't prepare information for simulation -isisfish.error.read.simulation=Can't read simulation information %1$s -isisfish.error.read.simulation.parameters=Can't read simulation parameters from file %1$s -isisfish.error.region.already.exists=This region already exists -isisfish.error.region.name.empty=Region name is empty -isisfish.error.remove.directory=Can't remove directory %1$s -isisfish.error.rename.region=Can't rename region to %1$s -isisfish.error.save.checkSum.compilation=Can't save checkSum to compilation\: %1$s -isisfish.error.save.region= -isisfish.error.save.script.compilation=Can't save script to compilation\: %1$s -isisfish.error.save.simulation.parameters=Can't save simulation parameters in file %1$s -isisfish.error.script.create=isisfish.error.script.create -isisfish.error.script.delete=Can't delete file %1$s for reason %2$s -isisfish.error.script.import=Can't import file for reason %1$s -isisfish.error.script.load=Can't load file %1$s for reason %2$s -isisfish.error.script.save=Can't save file %1$s for reason %2$s -isisfish.error.sensitivity.parameter= -isisfish.error.simulation.log.openAppender=could not open appender of simulation %1$s for reason %2$s -isisfish.error.simulation.remote.global=Can't launch a simulation on remote server -isisfish.error.simulation.remote.wrongportvalue=Connection port value is incorrect \: %s -isisfish.error.simulation.resultXml.close=Can't close simulation result XML for reason %1$s -isisfish.error.simulation.resultXml.open=Can't open simulation result XML for reason %1$s -isisfish.error.simulation.resultXml.write=Can't write simulation result XML for reason %1$s -isisfish.error.source.parameter=Can't get parameter from source -isisfish.error.strategy.order=Strategy %1$s don't have 12 StrategyMonthInfo but %2$s. Recreate them -isisfish.error.undefined.classes=No classes defined -isisfish.error.undefined.correspondence.zones.reproduction.recruitment=pas de correspondance entre les zones de reproduction et les zones de recrutement -isisfish.error.undefined.gear=The engin is not defined -isisfish.error.undefined.mesh=No mesh defined -isisfish.error.undefined.mesh.sector=No maille defined in sector -isisfish.error.undefined.meta.population=No population defined -isisfish.error.undefined.natural.death=No natural mortality on classes naissantes -isisfish.error.undefined.sector=No sector defined -isisfish.error.undefined.stategy=No strategy defined -isisfish.error.undefined.stategy.months=The strategy is not defined for some mounths -isisfish.error.undefined.zone.population=No population's zone defined -isisfish.error.undefined.zone.recruitment=No recrutment's zone defined -isisfish.error.undefined.zone.reproduction=No reprodution's zone defined -isisfish.error.unsupported.equation.langage=unsupported langage '%1$s' for equation\: %2$s -isisfish.error.wait.simThread=Can't wait SimThread -isisfish.error.warning.title=Warning -isisfish.error.write.simulation=Can't write information %1$s -isisfish.export.directory=Export directory -isisfish.export.saved=Export saved -isisfish.export.title=Results export -isisfish.factor.coefficient=Coefficient (in %) -isisfish.factor.comment=Comment -isisfish.factor.continue=Continuous factor -isisfish.factor.discret=Discret factor -isisfish.factor.equation.variable.action=Action -isisfish.factor.equation.variable.coefficient=Coef. (in %) -isisfish.factor.equation.variable.name=Name -isisfish.factor.equation.variable.operator=Operator -isisfish.factor.equation.variable.value=Value -isisfish.factor.factor=Factor -isisfish.factor.factors=Factors -isisfish.factor.firstValue=First value -isisfish.factor.increment=Cardinality -isisfish.factor.lastValue=Last value -isisfish.factor.name=Factor name -isisfish.factor.operateur=Operator -isisfish.factor.selectDiscretNumber=Number of factors -isisfish.factor.title=Factor input -isisfish.factor.validDiscretNumber=Ok -isisfish.factor.value=Value -isisfish.filter=Filter -isisfish.filter.apply=Apply filter -isisfish.filter.cancel=Cancel -isisfish.filter.log.levelDebug=Debug -isisfish.filter.log.levelError=Error -isisfish.filter.log.levelFatal=Fatal -isisfish.filter.log.levelInfo=Info -isisfish.filter.log.levelTrace=Trace -isisfish.filter.log.levelWarn=Warn -isisfish.filter.log.tooltip.levelDebug=Debug -isisfish.filter.log.tooltip.levelError=Error -isisfish.filter.log.tooltip.levelFatal=Fatal -isisfish.filter.log.tooltip.levelInfo=Info -isisfish.filter.log.tooltip.levelTrace=Trace -isisfish.filter.log.tooltip.levelWarn=Warn -isisfish.filter.log.tooltip.message=Enter a term to search and press Enter -isisfish.filter.reset=Reset -isisfish.filter.result=Results -isisfish.filter.result.found=Results (%d/%d) -isisfish.filter.select=filter.select -isisfish.filter.select.simulation=select.simulation -isisfish.filter.simulation=filter.simulation -isisfish.filter.simulation.analysePlanNumber=analysePlanNumber -isisfish.filter.simulation.description=description -isisfish.filter.simulation.local=local -isisfish.filter.simulation.numberOfYear=numberOfYear -isisfish.filter.simulation.regionName=regionName -isisfish.filter.simulation.simulationEnd=simulationEnd -isisfish.filter.simulation.simulationName=simulationName -isisfish.filter.simulation.simulationStart=simulationStart -isisfish.filter.simulation.simulatorName=simulatorName -isisfish.filter.simulation.tooltip.analysePlanNumber=filter.simulation.tooltip.analysePlanNumber -isisfish.filter.simulation.tooltip.description=filter.simulation.tooltip.description -isisfish.filter.simulation.tooltip.local=filter.simulation.tooltip.local -isisfish.filter.simulation.tooltip.numberOfYear=filter.simulation.tooltip.numberOfYear -isisfish.filter.simulation.tooltip.regionName=filter.simulation.tooltip.regionName -isisfish.filter.simulation.tooltip.simulationEnd=filter.simulation.tooltip.simulationEnd -isisfish.filter.simulation.tooltip.simulationName=filter.simulation.tooltip.simulationName -isisfish.filter.simulation.tooltip.simulationStart=filter.simulation.tooltip.simulationStart -isisfish.filter.simulation.tooltip.simulatorName=filter.simulation.tooltip.simulatorName -isisfish.filter.simulation.tooltip.useAnalysePlan=filter.simulation.tooltip.useAnalysePlan -isisfish.filter.simulation.tooltip.useOptimization=filter.simulation.tooltip.useOptimization -isisfish.filter.simulation.tooltip.usePreScript=filter.simulation.tooltip.usePreScript -isisfish.filter.simulation.tooltip.useStatistic=filter.simulation.tooltip.useStatistic -isisfish.filter.simulation.useAnalysePlan=filter.simulation.useAnalysePlan -isisfish.filter.simulation.useOptimization=filter.simulation.useOptimization -isisfish.filter.simulation.usePreScript=filter.simulation.usePreScript -isisfish.filter.simulation.useStatistic=filter.simulation.useStatistic -isisfish.fisheryRegion.addMap=Add map -isisfish.fisheryRegion.area=Fishery area boundaries -isisfish.fisheryRegion.comments=Comments -isisfish.fisheryRegion.delMap=Delete map -isisfish.fisheryRegion.latitude=Lat. -isisfish.fisheryRegion.latitude.max=Lat. max. -isisfish.fisheryRegion.latitude.min=Lat. min. -isisfish.fisheryRegion.longitude=Long. -isisfish.fisheryRegion.longitude.max=Long. max. -isisfish.fisheryRegion.longitude.min=Long. min. -isisfish.fisheryRegion.name=Region name -isisfish.fisheryRegion.ofCells=of cells (option) -isisfish.fisheryRegion.selectFile=Select a file -isisfish.fisheryRegion.spatial=Spatial resolution -isisfish.gear.comments=Comments -isisfish.gear.effortUnit=Effort Unit -isisfish.gear.name=Name -isisfish.gear.rangeValues=Range of values -isisfish.gear.standardisationFactor=Standardisation factor -isisfish.gear.technicalParameter=Technical parameter -isisfish.gear.title=Gear -isisfish.graphBean.graph.render=Choose a graph render -isisfish.graphBean.graphPanel=defaultToolTip-fr.ifremer.graph.GraphBean.graphPanel -isisfish.graphBean.graphRendererCombo=defaultToolTip-fr.ifremer.graph.GraphBean.graphRendererCombo -isisfish.graphBean.graphSplitPane=defaultToolTip-fr.ifremer.graph.GraphBean.graphSplitPane -isisfish.graphBean.label=defaultToolTip-fr.ifremer.graph.GraphBean.label1 -isisfish.graphBean.palettePanel=defaultToolTip-fr.ifremer.graph.GraphBean.palettePanel -isisfish.graphBean.scrolledwindow=defaultToolTip-fr.ifremer.graph.GraphBean.scrolledwindow1 -isisfish.graphBean.table=defaultToolTip-fr.ifremer.graph.GraphBean.table2 -isisfish.graphBean.table3=defaultToolTip-fr.ifremer.graph.GraphBean.table3 -isisfish.graphCombo.render.bar.horizontal=Rendu en barre horizontale -isisfish.graphCombo.render.bar.horizontal.stacked=Rendu en barre horizontale empilee -isisfish.graphCombo.render.bar.vertical=Rendu en barre verticale -isisfish.graphCombo.render.bar.vertical.3d=Rendu en barre verticale 3D -isisfish.graphCombo.render.bar.vertical.stacked=Rendu en barre verticale empilee -isisfish.graphCombo.render.line=Rendu en ligne -isisfish.graphCombo.render.min.max=Rendu en MinMax -isisfish.graphCombo.render.surface=Rendu en Aire -isisfish.infoItem..table=defaultToolTip-fr.ifremer.resultat.InfoItem.table29 -isisfish.infoItem.label=defaultToolTip-fr.ifremer.resultat.InfoItem.label -isisfish.infoItem.list=defaultToolTip-fr.ifremer.resultat.InfoItem.list -isisfish.infoItem.scrolledwindow=defaultToolTip-fr.ifremer.resultat.InfoItem.scrolledwindow1 -isisfish.infoItem.sum=defaultToolTip-fr.ifremer.resultat.InfoItemDate.sumButton -isisfish.infoItem.sum.year=Sum elements per year -isisfish.infoItem.table=defaultToolTip-fr.ifremer.resultat.InfoItem.table30 -isisfish.input.continueCells=Continue to cells -isisfish.input.continueGears=Continue to gears -isisfish.input.continueMetiers=Continue to metiers -isisfish.input.continuePopulations=Continue to populations -isisfish.input.continuePorts=Continue to ports -isisfish.input.continueSetOfVessels=Continue to set of vessels -isisfish.input.continueSpecies= -isisfish.input.continueStrategies=Continue to strategies -isisfish.input.continueTripTypes=Continue to trip type -isisfish.input.continueVesselTypes=Continue to vessel types -isisfish.input.continueZones=Continue to zones -isisfish.input.menu.addRegion=Add region -isisfish.input.menu.commit=Commit change -isisfish.input.menu.copyRegion=Copy Region -isisfish.input.menu.exportRegion=Export Region -isisfish.input.menu.importRegion=Import Region -isisfish.input.menu.importRegionSimulation=Import Region from simulation -isisfish.input.menu.importRegionV2=Import Region from v2 -isisfish.input.menu.importRenameRegion=Import Region and rename -isisfish.input.menu.removeLocaly=Remove localy -isisfish.input.menu.removeLocalyRemotely=Remove localy and remotely -isisfish.input.menu.server=Server -isisfish.input.newRegion=New region -isisfish.input.selectRegion=Select region -isisfish.input.title=Fishery input -isisfish.input.tree.cells=Cells -isisfish.input.tree.gears=Gears -isisfish.input.tree.metiers=Metiers -isisfish.input.tree.populations=Populations -isisfish.input.tree.ports=Ports -isisfish.input.tree.setofvessels=Set of vessels -isisfish.input.tree.species=Species -isisfish.input.tree.strategies=Strategies -isisfish.input.tree.triptypes=Trip types -isisfish.input.tree.vesseltypes=Vessel types -isisfish.input.tree.zones=Zones -isisfish.launch.anonymous=read only -isisfish.launch.email=email -isisfish.launch.firstname=firstname -isisfish.launch.init.done=init done in %1$s. -isisfish.launch.lasstname=lasstname -isisfish.launch.server.authenticationMethod=server access -isisfish.launch.server.login=server login -isisfish.launch.server.ssh.confirm.passphrase=confirm passphrase -isisfish.launch.server.ssh.key.change=Change your ssh key -isisfish.launch.server.ssh.key.generate=Generate ssh key -isisfish.launch.server.ssh.no.passphrase=no passphrase -isisfish.launch.server.ssh.passphrase=passphrase -isisfish.launch.server.ssh.privateKeyFile=private ssh key -isisfish.launch.server.ssh.publicKeyFile=public ssh key -isisfish.launch.ssh=read-write (ssh) -isisfish.launch.stop=Stopping simulation... -isisfish.launching=after init done in %1$s. -isisfish.log.addAppender=add appender [%1$s] -isisfish.log.body=Message to add -isisfish.log.closeAppender=closing appender %1$s for category %2$s -isisfish.log.mail.failed=Can't send report by mail. Is your mail server up ? (I'm trying to contact the < %1$s > smtp server) -isisfish.log.mail.send=A report has been sent to %1$s -isisfish.log.mail.send.title=Send simulation %1$s by email -isisfish.log.mailTo=Destination adress -isisfish.log.removeAppender=remove appender [%1$s] -isisfish.log.restoreLogLevel=swap back level for logger %1$s from level %2$s to level %3$s -isisfish.log.sendAll=Send the complete simulation archive -isisfish.log.sendMail=Send by email -isisfish.log.simulation.name=IsisFish simulation %1$s -isisfish.log.swapLogLevel=swap level for logger %1$s from level %2$s to level%3$s -isisfish.log.tooltip.body=The message will be join to email -isisfish.log.tooltip.mailTo=Enter destination adress -isisfish.log.tooltip.sendAll=Send the complete simulation archive, or just the log file -isisfish.log.tooltip.sendMail=Click here to send the email with files -isisfish.message.add.objets.simulation=Add new objets simulation -isisfish.message.backup.database.finished=backup database finished -isisfish.message.backup.database.progress=backup database in progress -isisfish.message.cancel.finished=Cancel finished -isisfish.message.check.finished=check finished -isisfish.message.check.region= -isisfish.message.checking.cell= -isisfish.message.choose.archive=choose archive file or directory -isisfish.message.commit.cancelled=commit cancelled -isisfish.message.commit.finished=commit finished -isisfish.message.commit.region.canceled=Commit region canceled -isisfish.message.commiting.region=Commiting region %1$s ... -isisfish.message.compilation.time=Compilation time %1$ss -isisfish.message.confirm.delete.object=Do you really want delete object %1$s -isisfish.message.confirm.remove.region=Do you really want to remove the region %1$s ? -isisfish.message.confirm.remove.script=Do you want to remove script '%1$s' ? -isisfish.message.copy.finished=Copy finished -isisfish.message.copy.region=Copy region to %1$s -isisfish.message.creating.region=Creating region %1$s -isisfish.message.creation.done=creation done %1$s -isisfish.message.creation.finished=Creation finished -isisfish.message.delete.canceled=delete canceled -isisfish.message.delete.entities=Delete entities -isisfish.message.delete.entity=Delete entity -isisfish.message.delete.finished=delete finished -isisfish.message.delete.object=To delete object %1$s, all next object will be deleted\n\n -isisfish.message.evaluation.finished=evaluation finished -isisfish.message.export.done=export done -isisfish.message.export.zip=Export to zip file %1$s -isisfish.message.file.overwrite=File exists, do you want overwrite it ? -isisfish.message.import=Import %1$s -isisfish.message.import.equation.convert=Manual equation convertion -isisfish.message.import.finished=Import finished -isisfish.message.import.region.name=Enter name for imported region -isisfish.message.import.region.xml=XMLed Region -isisfish.message.import.region.zipped=Zipped Region -isisfish.message.import.scripts.file.cancelled=Import scripts cancelled -isisfish.message.import.xml.v2.file=Import xml v2 file -isisfish.message.import.zip=Import zip file -isisfish.message.launchui.notlaunch= -isisfish.message.load.finished=load finished -isisfish.message.load.map=Try to load map file\: %1$s (%2$s, %3$s) -isisfish.message.loading.old.simulation=Loading old simulation ... -isisfish.message.loading.region=Loading region ... -isisfish.message.name.imported.region=Enter name for imported region -isisfish.message.new.filename=Enter the name of the new file. (use only chars and _ and start with uppercase) -isisfish.message.new.formule.category=Select the equation model's category -isisfish.message.new.formule.title=New equation model -isisfish.message.new.region.name=Enter new region name -isisfish.message.old.simulation.loaded=Old simulation loaded -isisfish.message.page.modified=This page has been modified, do you want to save it ? -isisfish.message.presimulation.script.execution=Presimulation Script execution -isisfish.message.recruitment.number.month=Input the number of month of recruitment -isisfish.message.region.commited=Region commited -isisfish.message.region.loaded=Region loaded -isisfish.message.region.remove.canceled=Region remove canceled -isisfish.message.region.removed=Region removed -isisfish.message.remove.canceled=Remove canceled -isisfish.message.remove.finished=Remove finished -isisfish.message.removing.region=Removing region %1$s ... -isisfish.message.result.verif.region=R\u00E9sultat de la v\u00E9rification de la r\u00E9gion -isisfish.message.save.finished=Save finished -isisfish.message.saveModel.finished=Save model finished -isisfish.message.script.commit=Enter commit message -isisfish.message.setting.cache.aspects=Setting Cache aspects -isisfish.message.setting.trace.aspects=Setting Trace aspects -isisfish.message.simulation.after=Result exports -isisfish.message.simulation.ended=Simulation ended -isisfish.message.simulation.execution=Simulation execution -isisfish.message.simulation.prepare=Preparing simulation -isisfish.message.tray.disabled=SystemTray disabled -isisfish.message.update.finished=update finished -isisfish.metier.comments=Comments -isisfish.metier.name=Name -isisfish.metier.rangeValues=Range of values -isisfish.metier.title=Metier -isisfish.metierMonitor.metiers=Metiers -isisfish.metierMonitor.strategies=Strategies -isisfish.metierSeasonInfo.toString=%1$s season %2$s-%3$s -isisfish.metierSeasonInfoSpecies.mainSpecies=Main species for the metier -isisfish.metierSeasonInfoSpecies.selectSeason=Select a season -isisfish.metierSeasonInfoSpecies.selectSpecies=Select a species -isisfish.metierSeasonInfoSpecies.species=Species -isisfish.metierSeasonInfoSpecies.targetFactor=Target factor -isisfish.metierSeasonInfoSpecies.title=Catchable species -isisfish.metierSeasonInfoZone.comments=Comments -isisfish.metierSeasonInfoZone.season=Season -isisfish.metierSeasonInfoZone.selectSeason=Select a season -isisfish.metierSeasonInfoZone.title=Seasons / Zones -isisfish.monitor.title=Application Monitor -isisfish.month.april=april -isisfish.month.august=august -isisfish.month.december=december -isisfish.month.february=february -isisfish.month.january=january -isisfish.month.july=july -isisfish.month.june=june -isisfish.month.march=march -isisfish.month.may=may -isisfish.month.november=november -isisfish.month.october=october -isisfish.month.september=september -isisfish.params.changeLogLev=Change from level '%1$s' to level '%2$s' -isisfish.params.clearFilter=Clear filter -isisfish.params.description=Description -isisfish.params.filter=Filter -isisfish.params.lblLauncher=Simulation launcher -isisfish.params.loadOldSimulation=Load old simulation -isisfish.params.numberYear=Number of year -isisfish.params.onlyExportSimulation=Only export simulation -isisfish.params.populationNumbers=Population numbers input -isisfish.params.ruleParameters=Rule's parameters -isisfish.params.sensitivityName=Sensitivity name -isisfish.params.simulationName=Simulation name -isisfish.params.title=Parameters -isisfish.params.toString.fishery=P\u00EAcherie\: %1$s\n\n -isisfish.params.toString.lib.logger.level=Level of libraries' logger %1$s -isisfish.params.toString.number.years=Number of years\: %1$s\n\n -isisfish.params.toString.plan=Plan\: %1$s -isisfish.params.toString.plan.number=Analyse plan sequence number\: %1$s\n\n -isisfish.params.toString.populations=Populations\: -isisfish.params.toString.rule=Rule\: %1$s -isisfish.params.toString.script.logger.level=Level of scripts' logger %1$s -isisfish.params.toString.script.presimulation=Script de presimulation -isisfish.params.toString.simul.logger.level=Level of simulator's logger %1$s -isisfish.params.toString.simulation.done=Simulation done with %1$s\: -isisfish.params.toString.strategies=Strat\u00E9gies d'exploitation\: -isisfish.params.useAnalysePlan=Use simulation plan -isisfish.params.usePreSimulationScript=Use pre simulation script -isisfish.population.capturability=Capturability -isisfish.population.comments=Comments -isisfish.population.group=Group -isisfish.population.groups=Groups -isisfish.population.mappingZoneReproZoneRecru=MappingZoneReproZoneRecru -isisfish.population.matrixAbundance=Abundance matrix -isisfish.population.matrixAbundance1D=matrixAbundance1D -isisfish.population.recruitment=Recruitment -isisfish.population.reproduction=Reproduction -isisfish.population.season=Season -isisfish.population.zones=Zones -isisfish.populationBasics.geographicID=Geographic identifier -isisfish.populationBasics.growth=Growth -isisfish.populationBasics.growthReverse=Reverse growth -isisfish.populationBasics.maturityGroup=Maturity group -isisfish.populationBasics.name=Name -isisfish.populationBasics.numberGroup=Number of group -isisfish.populationBasics.plusGroup=Plus group -isisfish.populationBasics.recreateClasses=Recreate classes -isisfish.populationBasics.title=Population input -isisfish.populationCapturability.comments=Comments -isisfish.populationCapturability.selectCoefficient=Select a coefficient per season and per class -isisfish.populationCapturability.title=Capturability input -isisfish.populationEquation.meanWeight=Mean weight -isisfish.populationEquation.naturalDeathRate=Natural death rate -isisfish.populationEquation.price=Price -isisfish.populationEquation.title=Equations input -isisfish.populationGroup.age=Age -isisfish.populationGroup.comments=Comments -isisfish.populationGroup.length=Length -isisfish.populationGroup.maximumLength=Maximum length -isisfish.populationGroup.meanWeigth=Mean Weigth -isisfish.populationGroup.minimumLength=Minimum length -isisfish.populationGroup.naturalDeathRate=Natural death rate -isisfish.populationGroup.price=Price -isisfish.populationGroup.reproductionRate=Reproduction rate -isisfish.populationGroup.title=Population group input -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.departureZone=Departure Zone -isisfish.populationMigrationEmigration.title=Population emigration -isisfish.populationMigrationImmigration.arrivalZone=Arrival Zone -isisfish.populationMigrationImmigration.coefficient=Coefficient -isisfish.populationMigrationImmigration.title=Population immigration -isisfish.populationMigrationMigration.arrivalZone=Arrival zone -isisfish.populationMigrationMigration.coefficient=Coefficient -isisfish.populationMigrationMigration.departureZone=Departure zone -isisfish.populationMigrationMigration.title=Population migration -isisfish.populationRecruitment.comments=Comments -isisfish.populationRecruitment.monthgapgetweenreprorecruitment=Month gap between repro and recruitment -isisfish.populationRecruitment.recruitmentDistribution=Recruitment distribution -isisfish.populationRecruitment.reproductionEquation=Reproduction equation -isisfish.populationRecruitment.title=Recruitment input -isisfish.populationSeasonInfo.arrival=Arrival -isisfish.populationSeasonInfo.departure=Departure -isisfish.populationSeasonInfo.distributionSpawing=Distribution of spawing -isisfish.populationSeasonInfo.emigration=Emigration -isisfish.populationSeasonInfo.group=Group -isisfish.populationSeasonInfo.immigration=Immigration -isisfish.populationSeasonInfo.migration=Migration -isisfish.populationSeasonInfo.months=Months -isisfish.populationSeasonInfo.toString=%1$s season %2$s-%3$s -isisfish.populationSeasons.Reproduction=Reproduction -isisfish.populationSeasons.changeGroup=Change of group -isisfish.populationSeasons.comments=Comments -isisfish.populationSeasons.computeCoefficient=Calculate coefficient -isisfish.populationSeasons.distributionSpawning=Distribution of spawning -isisfish.populationSeasons.noSpacialized=Not spacialized -isisfish.populationSeasons.selectSeason=Select a season -isisfish.populationSeasons.showSpacialized=Show the spacialized -isisfish.populationSeasons.spacialized=Spacialized -isisfish.populationSeasons.spacialized.visualisation=Spacialized -isisfish.populationSeasons.title=Saisons -isisfish.populationZones.betweenSpawningRecruitmentAreas=Match between spawning and recruitment areas -isisfish.populationZones.selectPopulationAreas=Select the population areas -isisfish.populationZones.selectRecruitmentAreas=Select the recruitment areas -isisfish.populationZones.selectSpawningAreas=Select the spawning areas -isisfish.populationZones.title=Zones -isisfish.port.cell=Port cell -isisfish.port.comments=Comments -isisfish.port.name=Name -isisfish.preScript.backParameter=Back to parameter tab -isisfish.preScript.title=Pre simulation script -isisfish.queue.clearDone=Clear done jobs -isisfish.queue.id=Id -isisfish.queue.launcher=Simulation launcher -isisfish.queue.masterplan=Master plan -isisfish.queue.notstarted=Not started -isisfish.queue.plan=Plan -isisfish.queue.progression=Progress -isisfish.queue.restartSimulation=Restart -isisfish.queue.showLog=Show simulation log -isisfish.queue.simulationLaunch=Simulation queue launch -isisfish.queue.status=Status -isisfish.queue.stopSimulation=Stop simulation -isisfish.queue.title=Queue -isisfish.result.abundance=Abondance -isisfish.result.add=Add a result -isisfish.result.begin.simulation=En debut de Simulation\: -isisfish.result.capture=Capture -isisfish.result.capture.metier=Capture par metier -isisfish.result.choose.simulation=Choose a Simulation -isisfish.result.datas=Datas -isisfish.result.datasRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.donneeRadioButton -isisfish.result.desktopPane=defaultToolTip-fr.ifremer.resultat.ResultatView.desktopPane -isisfish.result.dimension=Dimension -isisfish.result.end.simulation=Simuation end \: -isisfish.result.export=Export -isisfish.result.export.file=Export text file -isisfish.result.file=File -isisfish.result.graph=Graph -isisfish.result.graphRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.graphRadioButton -isisfish.result.hpaned=defaultToolTip-fr.ifremer.resultat.ResultatEdit.hpaned2 -isisfish.result.infoPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.infoPanel -isisfish.result.label=defaultToolTip-fr.ifremer.resultat.ResultatView.label9 -isisfish.result.map=Map -isisfish.result.mapRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.mapRadioButton -isisfish.result.menuExport=defaultToolTip-fr.ifremer.resultat.ResultatEdit.menuExport -isisfish.result.menubar=defaultToolTip-fr.ifremer.resultat.ResultatView.menubar1 -isisfish.result.menuitem=defaultToolTip-fr.ifremer.resultat.ResultatView.menuitem2 -isisfish.result.new.window=Open a new window -isisfish.result.openWindowButton=defaultToolTip-fr.ifremer.resultat.ResultatView.openWindowButton -isisfish.result.quit=Quitter -isisfish.result.reject.metier=Rejet par metier -isisfish.result.remove.simulation=Supprimer Simulation -isisfish.result.removeSimulationButton=defaultToolTip-fr.ifremer.resultat.ResultatView.supprimerSimulationButton -isisfish.result.resultat=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resultat -isisfish.result.scroll=defaultToolTip-fr.ifremer.resultat.ResultatEdit.scroll -isisfish.result.show.simulation.log=Show logs -isisfish.result.simulation=defaultToolTip-fr.ifremer.resultat.ResultatView.simulation -isisfish.result.statusBar=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusbar1 -isisfish.result.statusImage=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusImage -isisfish.result.stress.metier=Effort par metier -isisfish.result.summary=R\u00E9sum\u00E9 -isisfish.result.summaryRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resumeRadioButton -isisfish.result.table=defaultToolTip-fr.ifremer.resultat.ResultatView.table33 -isisfish.result.title=Resultat -isisfish.result.tooltip.show.simulation.log=Click to display the log console of the simulation -isisfish.result.unload.metier=Debarquement par metier -isisfish.result.vbox=defaultToolTip-fr.ifremer.resultat.ResultatView.vbox1 -isisfish.result.viewPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.viewPanel -isisfish.resultChoice.save=Results to save -isisfish.resultChoice.saved=Results saved -isisfish.resultChoice.title=Result choice -isisfish.resume.matrixInfoGrid=defaultToolTip-fr.ifremer.resultat.ResumePanel.matriceInfoGrid -isisfish.resume.resumeTextArea=defaultToolTip-fr.ifremer.resultat.ResumePanel.resumeTextArea -isisfish.resume.scrolledwindow=defaultToolTip-fr.ifremer.resultat.ResumePanel.scrolledwindow2 -isisfish.resume.table=defaultToolTip-fr.ifremer.resultat.ResumePanel.table1 -isisfish.script.check=Check -isisfish.script.commit=Commit -isisfish.script.compilation.failed=%s -isisfish.script.compilation.ok=Compilation complete.\n---------------------\n\n%s -isisfish.script.copy=Copy -isisfish.script.cut=Cut -isisfish.script.evaluate=Evaluate -isisfish.script.export=export -isisfish.script.export.cancel=cancel -isisfish.script.export.checkAll=checkAll -isisfish.script.export.chooseDir=chooseDir -isisfish.script.export.ok=ok -isisfish.script.export.tooltip.checkAll= -isisfish.script.export.tooltip.chooseDir= -isisfish.script.import=import -isisfish.script.import.cancel=cancel -isisfish.script.import.checkAll=checkAll -isisfish.script.import.labelAdd=labelAdd -isisfish.script.import.labelOverwrite=labelOverwrite -isisfish.script.import.ok=ok -isisfish.script.import.tooltip.checkAll= -isisfish.script.menu.checkSyntax=CheckSyntax -isisfish.script.menu.code=Code -isisfish.script.menu.commit=Commit script to server -isisfish.script.menu.copy=Copy -isisfish.script.menu.cut=Cut -isisfish.script.menu.deleteLocaly=Delete localy -isisfish.script.menu.deleteLocalyServer=Delete localy and on server -isisfish.script.menu.diff=Display diff with server version -isisfish.script.menu.edit=Edit -isisfish.script.menu.evaluate=Evaluate -isisfish.script.menu.file=File -isisfish.script.menu.new=New -isisfish.script.menu.paste=Paste -isisfish.script.menu.save=Save -isisfish.script.menu.txtExport=Export -isisfish.script.menu.txtImport=Import -isisfish.script.menu.txtNewAnalysePlan=New analyse plan -isisfish.script.menu.txtNewEquationModel=New equation model -isisfish.script.menu.txtNewExport=New export -isisfish.script.menu.txtNewRule=New rule -isisfish.script.menu.txtNewScript=New script -isisfish.script.menu.txtNewSensitivity=New sensitivity calculator -isisfish.script.menu.txtNewSimulator=New simulator -isisfish.script.menu.txtVCS=Server -isisfish.script.menu.update=Update from server -isisfish.script.new=New -isisfish.script.paste=Paste -isisfish.script.save=Save -isisfish.script.title=Script Editor -isisfish.script.txtExport=Export -isisfish.season.toString=season %1$s-%2$s -isisfish.selectivity.equation=Equation -isisfish.selectivity.selectPopulation=Select a population -isisfish.selectivity.title=Selectivity -isisfish.sens.backParameter=Back to parameter tab -isisfish.sens.title=Simulation plan -isisfish.sensitivity.displaysecondpass=Display results -isisfish.sensitivity.export=Export -isisfish.sensitivity.secondpass=Analyze results -isisfish.sensitivity.secondpass.title=Analyze results -isisfish.sensitivity.select=Method -isisfish.sensitivity.title=Sensitivity analysis -isisfish.sensitivityChooser.title=Sensitivities input -isisfish.server.ssh.generateKey.title=Generate Ssh key -isisfish.setOfVessels.comments=Comments -isisfish.setOfVessels.fixedCosts=Fixed costs -isisfish.setOfVessels.name=Name -isisfish.setOfVessels.numberOfVessels=Number of vessels -isisfish.setOfVessels.technicalEfficiency=Technical efficiency -isisfish.setOfVessels.title=Caracteristics -isisfish.setOfVessels.vesselType=Vessel type -isisfish.simpleResult.legendPanel=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.legendPanel -isisfish.simpleResult.more.information=Clic a cell for more information... -isisfish.simpleResult.resultatMap=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMap -isisfish.simpleResult.resultatMapToolBar=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMapToolBar -isisfish.simpleResult.table=defaultToolTip-fr.ifremer.isisfish.map.SimpleResultatMapBean.table12 -isisfish.simulation.log.console.title=Log console for simulation '%1$s' -isisfish.simulation.log.showConsole=display log console for simulation %1$s -isisfish.simulation.menu.import=Restor simulation parameter -isisfish.simulation.menu.save=Save simulation parameter -isisfish.simulation.menu.simulation=Simulation -isisfish.simulation.name=Simulation name -isisfish.simulation.remote.message.connection=Connecting to Caparmor -isisfish.simulation.remote.message.downloadresults=Downloading results -isisfish.simulation.remote.message.upload=Uploading simulation -isisfish.simulation.remote.message.waitingavailable=Waiting for available resource. -isisfish.simulation.remote.message.waitingstart=Waiting for simulation start -isisfish.simulation.restarting=Restarting... -isisfish.simulation.title=Simulation launcher -isisfish.simulator.launcher.inprocess=in current process -isisfish.simulator.launcher.remote=on Caparmor server -isisfish.simulator.launcher.subprocess=in subprocess -isisfish.simulator.simulaction.badid=Can't start simulation, bad id\: %s -isisfish.simulator.ssh.configuration.connecting=Connection... -isisfish.simulator.ssh.configuration.connectingpk=Connection with public key... -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.invalidpassphrase=Invalid passphrase -isisfish.simulator.ssh.configuration.keygenerate=Generate -isisfish.simulator.ssh.configuration.test=Test configuration -isisfish.simulator.ssh.configuration.title=Caparmor launcher configuration -isisfish.simulator.subprocess.readoutput.error= -isisfish.species.age=Age -isisfish.species.cee=CEE -isisfish.species.comments=Comments -isisfish.species.length=Length -isisfish.species.name=Species name -isisfish.species.rubbinCode=Rubbin code -isisfish.species.scientificName=Scientific name -isisfish.species.structured=Structured -isisfish.ssh.askpassphrase.message=Enter passphrase for key '%s' \: -isisfish.ssh.askpassphrase.title=SSH key unlocking -isisfish.ssh.askpassphrase.wrongpassphrase=Wrong passphrase, enter a new one for key '%s' \: -isisfish.strategy.comments=Comments -isisfish.strategy.inactivity=Inactivity equation -isisfish.strategy.inactivityEquationUsed=Use inactivity equation -isisfish.strategy.name=Name -isisfish.strategy.proportionSetOfVessels=Set of vessels proportion -isisfish.strategy.title=Caracteristics -isisfish.strategyMonthInfo.metier=Metier -isisfish.strategyMonthInfo.minInactivityDays=Min inactivity days -isisfish.strategyMonthInfo.numberOfTrips=Number of trips -isisfish.strategyMonthInfo.proportion=Proportion -isisfish.strategyMonthInfo.title=StrategyMonthInfo -isisfish.strategyMonthInfo.toString=%1$s %2$s -isisfish.timeUnit.day=Day -isisfish.timeUnit.hours=Hours -isisfish.tray.simulation=Isis-fish - %1$s \: %2$s/%3$s -isisfish.tray.simulation.no=Isis-fish - No simulation -isisfish.tripType.comments=Comments -isisfish.tripType.duration=Duration -isisfish.tripType.minTime=Minimum time between trips -isisfish.tripType.name=Name -isisfish.vcs.ask.passphrase=Enter your pass phrase (if your private key have one). -isisfish.vcs.ask.passphrase.title=Ask your pass phrase -isisfish.vcs.commit=vcs.commit -isisfish.vcs.commit.cancel=vcs.commit.cancel -isisfish.vcs.commit.label=vcs.commit.label -isisfish.vcs.commit.ok=vcs.commit.ok -isisfish.vcs.init.notfoundcantdownload=No database version %s found and can't get it.\nYou must go to ISIS-Fish web site and download database manually. -isisfish.vcs.init.wrongprotocol=Your database repository\: %s\n don't use correct protocol.\nDo you want to make backup of your database and take the correct one ? -isisfish.vcs.switchprotocol.confirm=Protocol to access repository script has changed.\nDo you want to switch your repository ? -isisfish.vcs.switchtag.warningconflict=Your repository is now up-to-date, but following files are conflicted, you may check them \:\n -isisfish.vcs.switchversion.confirm=You don't use correct repository script for your application version %s.\nDo you want to switch your repository ? -isisfish.vcs.update=vcs.update -isisfish.vcs.update.cancel=cancel -isisfish.vcs.update.checkAll=checkAll -isisfish.vcs.update.local=local -isisfish.vcs.update.local.modified=modified -isisfish.vcs.update.local.outofdateAndModified=outofdateAndModified -isisfish.vcs.update.local.tooltip.modified= -isisfish.vcs.update.local.tooltip.outofdateAndModified= -isisfish.vcs.update.local.tooltip.unversionned= -isisfish.vcs.update.local.unversionned=unversionned -isisfish.vcs.update.ok=ok -isisfish.vcs.update.remote=remote -isisfish.vcs.update.remote.missing=missing -isisfish.vcs.update.remote.outofdate=outofdate -isisfish.vcs.update.remote.tooltip.missing= -isisfish.vcs.update.remote.tooltip.outofdate= -isisfish.vcs.update.tooltip.checkAll=checkAll -isisfish.vcs.update.tooltip.local= -isisfish.vcs.update.tooltip.remote= -isisfish.vcs.update.warningconflict=Your repository is now up-to-date, but following files are conflicted, you may check them \:\n -isisfish.vcs.updateconfirm=updateconfirm -isisfish.vcs.updateconfirm.cancel=cancel -isisfish.vcs.updateconfirm.checkAll=checkAll -isisfish.vcs.updateconfirm.label= -isisfish.vcs.updateconfirm.label2= -isisfish.vcs.updateconfirm.ok=ok -isisfish.vcs.updateconfirm.tooltip.checkAll= -isisfish.vcs.updaterepository.confirm=Your repository is not up to date.\nDo you want to update following files ? -isisfish.vcs.vcssvn.add.error=Can't add file -isisfish.vcs.vcssvn.add.errorreadonly=You can't add file, this repository is readonly -isisfish.vcs.vcssvn.checkProtocol.error=Can't get address on serveur of local repository -isisfish.vcs.vcssvn.checkProtocol.relocate=Relocate repository %s from %s to %s -isisfish.vcs.vcssvn.checkout.error=Can't checkout -isisfish.vcs.vcssvn.cleanup.error=Can't cleanup working copy -isisfish.vcs.vcssvn.commit.error=Can't commit files -isisfish.vcs.vcssvn.commit.errorreadonly=You can't commit file, this repository is readonly -isisfish.vcs.vcssvn.delete.error=Can't delete file -isisfish.vcs.vcssvn.delete.errorreadonly=You can't delete file, this repository is readonly -isisfish.vcs.vcssvn.diff.error=Can't get diff -isisfish.vcs.vcssvn.gettag.error=Can't get address on serveur of local repository -isisfish.vcs.vcssvn.getupdate.error=Can't status file -isisfish.vcs.vcssvn.global.filelocalandremotestatus=file %s status is (l\:%s/r\:%s) -isisfish.vcs.vcssvn.global.filestatus=status for %s is %s -isisfish.vcs.vcssvn.global.foundUpdatedFile=add %s as updated file -isisfish.vcs.vcssvn.global.torevision=At revision \: %d -isisfish.vcs.vcssvn.isconnected.switchoff=Can't connect to serveur, switch to off line\: %s -isisfish.vcs.vcssvn.isconnected.switchto=Connection to serveur available, switch on line\: %s -isisfish.vcs.vcssvn.isonremote.error=file %s is not on server -isisfish.vcs.vcssvn.istag.notexist=Tag %s don't exist -isisfish.vcs.vcssvn.isuptodate.error=Can't get file status -isisfish.vcs.vcssvn.list.error=Can't list files -isisfish.vcs.vcssvn.localstatus.error=Can't status file -isisfish.vcs.vcssvn.remotestatus.error=Can't status file -isisfish.vcs.vcssvn.setTag.error=Can't get address on server of local repository -isisfish.vcs.vcssvn.settag.switchfromto=Switch repository tag from %s to %s -isisfish.vcs.vcssvn.update.error=Can't update files -isisfish.vcs.vcssvn.update.notinlocal=Can't update file that not in local repository -isisfish.versionStorage.removed=Removed -isisfish.vesselType.activityRange=Activity range -isisfish.vesselType.comments=Comments -isisfish.vesselType.fuelCost=Fuel cost of travel -isisfish.vesselType.length=Length -isisfish.vesselType.maxDuration=Maximum trip duration -isisfish.vesselType.miniCrew=Minimum crew size -isisfish.vesselType.name=Name -isisfish.vesselType.speed=Speed -isisfish.welcome.menu.about=About -isisfish.welcome.menu.api=API -isisfish.welcome.menu.close=Close -isisfish.welcome.menu.configuration=Configuration -isisfish.welcome.menu.configuration.sshlauncher=Caparmor configuration -isisfish.welcome.menu.configuration.vcs=VCS Configuration -isisfish.welcome.menu.file=File -isisfish.welcome.menu.frame=Frame -isisfish.welcome.menu.help=Help -isisfish.welcome.menu.help.isisfish=Isis-Fish Website -isisfish.welcome.menu.help.isisfishapi=Isis-Fish API -isisfish.welcome.menu.help.javaapi=Java API -isisfish.welcome.menu.help.lutinmatrixapi=LutinMatrix API -isisfish.welcome.menu.help.topiaapi=ToPIA API -isisfish.welcome.menu.input=Input -isisfish.welcome.menu.monitor=Logs frame -isisfish.welcome.menu.queue=Simulation queue -isisfish.welcome.menu.result=Result -isisfish.welcome.menu.script=Script -isisfish.welcome.menu.simulation=Simulation Launcher -isisfish.welcome.menu.synchro=Server Synchronisation -isisfish.welcome.title=Ifremer Simulation -isisfish.wizardGroupCreation.allGroupsSameSize=All groups have the same size -isisfish.wizardGroupCreation.allValues=Input all the values -isisfish.wizardGroupCreation.computedGrowthCurve=Computed by a growth curve -isisfish.wizardGroupCreation.firstAge=First age -isisfish.wizardGroupCreation.firstAgeHelp=First age \= minimal age -isisfish.wizardGroupCreation.firstGroup=First group -isisfish.wizardGroupCreation.firstLength=First length -isisfish.wizardGroupCreation.firstLengthHelp=First length \= minimal length of first group -isisfish.wizardGroupCreation.gapBetweenGroupsHelp=gap between to group is 1 year. -isisfish.wizardGroupCreation.groupWidth=Group width -isisfish.wizardGroupCreation.groupWidthHelp=Group width \= width of group -isisfish.wizardGroupCreation.lastAge=Last age -isisfish.wizardGroupCreation.lastAgeHelp=Last age \= maximal age -isisfish.wizardGroupCreation.maxGroupsLength=Maximal groups length -isisfish.wizardGroupCreation.maxGroupsLengthHelp=A semicolon ';' must separe maximal length of each group -isisfish.wizardGroupCreation.numberGroup=Number of group -isisfish.wizardGroupCreation.numberGroupHelp=number of Group \= number of group wanted -isisfish.wizardGroupCreation.numberGroups=Number of groups -isisfish.wizardGroupCreation.populationCharacteristics=Input the population characteristics -isisfish.wizardGroupCreation.selectGroupLengthType=Select group length type -isisfish.wizardGroupCreation.timeStep=Time step (in month) -isisfish.wizardGroupCreation.title=Group creation -isisfish.wizardGroupCreation.undefinedGrowthEquation=The equation used is the population's growth curve, it needs to be defined first. -isisfish.zone.cells=Zone cells -isisfish.zone.comments=Comments -isisfish.zone.name=Name -region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= -simulate\ %s\ with\ file\ %s= Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties (from rev 2489, isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-en_GB.properties 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,1103 @@ +Add\ to\ %s\ queue= +Add\ to\ default\ queue= +Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s= +Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s +Can't\ add\ simulation\:\ = +Can't\ create\ simulation\ logger=Can't create simulation logger +Can't\ delete\ simulation\ %s\ = +Can't\ do\ post\ action\ %s= +Can't\ do\ simulation\ %s= +Can't\ download\ archive\ \:\ %s= +Can't\ download\ file= +Can't\ evaluate\ simulation\ prescript= +Can't\ export\ simulation\ %s= +Can't\ get\ changlog= +Can't\ get\ result\:\ %1$s=Can't get result\: %1$s +Can't\ instanciate\ export\ %1$s=Can't instanciate export %1$s +Can't\ instanciate\ wanted\ VCS\ (%s),\ use\ default= +Can't\ instantiate\ %s= +Can't\ open\ log\ for\ %s= +Can't\ read\ ssh\ key\ \:\ %s= +Can't\ simulate\ %s= +Check\ state\ of\ local\ repository\:\ %s= +Check\ syntax\ of\ the\ current\ script= +Checkout\ pom.xml\ to\ %s= +Command\ '%s'\ fail\ to\ execute= +Commit\ script\ to\ CVS\ server= +Copy\ current\ selection\ (Ctrl-c)= +Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s= +Create\ a\ new\ script= +Cut\ current\ selection\ (Ctrl-x)= +Error\ during\ vcs\ initialisation= +Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys= +Export\ selected\ script(s)\ to\ zip\ archive= +Generate\ next\ simulation= +Import\ one\ java\ file\ script\ source= +Import\ simulation\ file\ %s\ in\ directory\ %s\ and\ rename\ from\ %s\ to\ %s= +Import\ zipped\ file\ containing\ all\ scripts\ directory\ structure= +Info=Info +Jobs\ submited\ is\ not\ ItemSimulation\ but\ was\ %s= +Last\ entry\ was\ %s\ extract\ name\ %s= +Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)= +Local\ repository\ don't\ exist= +Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s= +Normal\ stop\ thread,\ this\ is\ not\ an\ error= +Not\ start\ simulation\ %s\ because\ user\ ask\ stop= +Paste\ current\ selection\ (Ctrl-v)= +Process\ template\ error= +Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= +Region\ %s\ already\ inited= +Remote\ IsisFish\ server= +Remote\ control\ file\ doesn't\ exists\ %s= +Remote\ information\ file\ doesn't\ exists\ %s= +Rename\ data\ directory\ to\ %s= +Save\ current\ script= +Show\ help= +SimulationExecutor\ started\ with\ %s\ thread\ for\ %s= +Ssh\ key\ found\ '%s'\ will\ be\ used\ to\ connect\ to= +Stop\ simulation\ plan,\ because\ can't\ call\ afterSimulation\ correctly\ on\ plan\ %s= +Stop\ the\ process= +SubProcess\ start\:\ %s\ %s= +Switch\ repository\ type\ to\ none= +Try\ to\ eval\ current\ script\ (must\ be\ have\ main\ method)= +Try\ to\ log\ on\ %s@%s\:%d= +Use\ branches,\ switch\ not\ needed= +User\ restart\ simulation\ %s= +User\ stop\ simulation\ %s= +could\ not\ close\ reader\ %1$s=could not close reader %1$s +could\ not\ create\ simulation\ filter\ model\ for\ reason\ %1$s=could not create simulation filter model for reason %1$s +could\ not\ filter\ on\ simulations=could not filter on simulations +could\ not\ found\ %s= +could\ not\ found\ log\ file\ %1$s=could not found log file %1$s +could\ not\ found\ region\ %s= +could\ not\ found\ simulation\ %s= +could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s +destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= +destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite= +directory\ %s\ must\ be\ a\ directory= +filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines. +in\ hour= +isisfish.about.abouthtmltext=<html><b>Isis-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2009.<br /><br /><a href\="http\://isis-fish.labs.libre-entreprise.org">http\://isis-fish.labs.libre-entreprise.org</a><br /><br />Please, report any bug you can found.<html> +isisfish.about.licensetext=You can modify and redistribute the program under the conditions of the GNU General Public License (version 2 or later). A copy of the GPL is in the file "LICENSE.txt" provided with Isis-Fish. All rights reserved. No guarantees are provided for use of this program. +isisfish.about.title=About Isis-Fish... +isisfish.advancedParameters.title=Advanced parameters +isisfish.advancedParams.freeParameters=Free parameters +isisfish.advancedParams.libLevelLogger=Library log level +isisfish.advancedParams.scriptLevelLogger=Script log level +isisfish.advancedParams.simulLevelLogger=Simulator log level +isisfish.advancedParams.simulationCache=Simulation cache +isisfish.advancedParams.simulationStatistique=Simulation statistics +isisfish.advancedParams.simulatorUse=Simulator to Use +isisfish.cell.comments=Comments +isisfish.cell.land=Land +isisfish.cell.latitude=Latitude +isisfish.cell.longitude=Longitude +isisfish.cell.name=Name +isisfish.change.equation=Can't change equation +isisfish.commit.message=Enter commit message +isisfish.common.add=Add +isisfish.common.add.short=add +isisfish.common.alert=alert +isisfish.common.apply=Apply +isisfish.common.blank=\ +isisfish.common.cancel=Cancel +isisfish.common.check=Check +isisfish.common.clear=Clear +isisfish.common.date=Date +isisfish.common.debug=debug +isisfish.common.delete=Delete +isisfish.common.ellipsis=... +isisfish.common.emigration=Emigration +isisfish.common.equation=Equation +isisfish.common.error=error +isisfish.common.finish=Finish +isisfish.common.gear=Gear +isisfish.common.immigration=immigration +isisfish.common.info=info +isisfish.common.migration=migration +isisfish.common.month=month %1$s +isisfish.common.name=Name +isisfish.common.new=New +isisfish.common.newMatrix=New matrix +isisfish.common.next=Next +isisfish.common.ok=Ok +isisfish.common.openEditor=Open editor +isisfish.common.population=Population +isisfish.common.populationGroup=Population group +isisfish.common.populations=Populations +isisfish.common.port=port +isisfish.common.prev=Previous +isisfish.common.region=Region +isisfish.common.remove=Remove +isisfish.common.reset=Reset +isisfish.common.rules=Rules +isisfish.common.save=Save +isisfish.common.saveModel=Save as model +isisfish.common.saveNextSimulation=Save for next simulation +isisfish.common.season=Season +isisfish.common.setOfVessels=Set of vessels +isisfish.common.simulate=Simulate +isisfish.common.stop=Stop +isisfish.common.strategies=Strategies +isisfish.common.sum=Sum +isisfish.common.tag=Tag +isisfish.common.tripType=Trip type +isisfish.common.valid=Valid +isisfish.common.value=Value +isisfish.common.warn=warn +isisfish.common.year=year +isisfish.common.zone=Zone +isisfish.config.database.lockmode.description= +isisfish.config.main.compileDirectory.description= +isisfish.config.main.configFileName.description= +isisfish.config.main.defaultBackupDirectory.description= +isisfish.config.main.defaultExportDirectory.description= +isisfish.config.main.defaultExportNames.description= +isisfish.config.main.defaultMapFile.description= +isisfish.config.main.defaultResultNames.description= +isisfish.config.main.defaultSimulator.description= +isisfish.config.main.defaultTagValue.description= +isisfish.config.main.encoding.description=encoding used on system +isisfish.config.main.javadocDirectory.description= +isisfish.config.main.javadocURL.description= +isisfish.config.main.launchUI.description= +isisfish.config.main.localSimulator.description= +isisfish.config.main.locale.description=user locale +isisfish.config.main.login.description= +isisfish.config.main.password.description= +isisfish.config.main.projectName.description=name of project +isisfish.config.main.regionMap.description= +isisfish.config.main.remoteCaparmor.description= +isisfish.config.main.resultExport.description= +isisfish.config.main.simulation.max.simultaneous.simulation=Simultaneous simulation +isisfish.config.main.simulation.max.simultaneous.simulation.description=Simultaneous simulation to do on Caparmor +isisfish.config.main.simulation.ssh.control.check.interval=Control check interval (seconds) +isisfish.config.main.simulation.ssh.control.check.interval.description=Control check interval (seconds) +isisfish.config.main.simulation.ssh.datapath=Isis-Fish database +isisfish.config.main.simulation.ssh.datapath.description=Isis-Fish database path +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.pbsbinpath=PBS executables directory +isisfish.config.main.simulation.ssh.pbsbinpath.description=PBS executables (qsub, qdel...) directory +isisfish.config.main.simulation.ssh.server=Server address +isisfish.config.main.simulation.ssh.server.description=Server adress +isisfish.config.main.simulation.ssh.tmppath=Server temp directory +isisfish.config.main.simulation.ssh.tmppath.description=Server temp directory +isisfish.config.main.simulation.ssh.userhome=User home directory +isisfish.config.main.simulation.ssh.userhome.description=User home directory +isisfish.config.main.simulation.ssh.username=SSH identifier +isisfish.config.main.simulation.ssh.username.description=SSH identifier +isisfish.config.main.simulationServer.description= +isisfish.config.main.simulationShowOnlyError.description= +isisfish.config.main.simulationShowOnlyQueue.description= +isisfish.config.main.smtpServer.description= +isisfish.config.main.subSimulator.description= +isisfish.config.main.userMail.description= +isisfish.config.main.userName.description= +isisfish.config.ssh.key.file=SSH key +isisfish.config.ssh.key.file.description=Private SSH key path +isisfish.config.vcs.hostName.description= +isisfish.config.vcs.keyFile.description= +isisfish.config.vcs.localDatabasePath.description= +isisfish.config.vcs.noPassPhrase.description= +isisfish.config.vcs.passphrase.description= +isisfish.config.vcs.remoteDatabase.description= +isisfish.config.vcs.remotePath.description= +isisfish.config.vcs.type.description= +isisfish.config.vcs.typeRepo.description= +isisfish.config.vcs.useSshConnexion.description= +isisfish.config.vcs.userName.description= +isisfish.config.vcs.userPassword.description= +isisfish.dataResult.descriptionLabel=defaultToolTip-fr.ifremer.resultat.DataResult.descriptionLabel +isisfish.dataResult.export.csv=Export to CSV +isisfish.dataResult.exportButton=defaultToolTip-fr.ifremer.resultat.DataResult.exportButton +isisfish.dataResult.label=label9 +isisfish.dataResult.matriceTable=defaultToolTip-fr.ifremer.resultat.DataResult.matriceTable +isisfish.dataResult.scrolledwindow2=defaultToolTip-fr.ifremer.resultat.DataResult.scrolledwindow2 +isisfish.dataResult.table2=defaultToolTip-fr.ifremer.resultat.DataResult.table2 +isisfish.date.toString=%1$s %2$s +isisfish.effortDescription.crewFoodCost=Crew food cost +isisfish.effortDescription.crewShareRate=Crew share rate +isisfish.effortDescription.crewSize=Crew size +isisfish.effortDescription.economicTitle=\u00C9conomiques parameters +isisfish.effortDescription.effortTitle=Fishing effort parameters +isisfish.effortDescription.fishingOperation=Fishing operation +isisfish.effortDescription.fishingOperationDuration=Fishing operation duration +isisfish.effortDescription.fishingOperationDuration.tooltip=In hours +isisfish.effortDescription.fixedCrewSalary=Fixed crew salary +isisfish.effortDescription.gearsNumberPerOperation=Gears number per operation +isisfish.effortDescription.landingCosts=Landing costs +isisfish.effortDescription.otherRunningCost=Other running cost +isisfish.effortDescription.parametersTitle=M\u00E9tiers parameters +isisfish.effortDescription.repairAndMaintenanceGearCost=Repair and maintenance gear cost +isisfish.effortDescription.title=Practiced metier +isisfish.effortDescription.toString=EffortDescription for %1$s with %2$s +isisfish.effortDescription.unitCostOfFishing=Fishing unit cost +isisfish.equation.editor.title=Equation Editor +isisfish.error.acceptable.population=New value isn't acceptable value for this population +isisfish.error.add.card=Error while adding of result to the map. +isisfish.error.add.logger.simulation=isisfish.error.add.logger.simulation +isisfish.error.add.result.data=Error while adding result ot data. +isisfish.error.add.result.graph=Error while adding result to graph +isisfish.error.add.tray=Can't add system tray icon +isisfish.error.change.classloader=Can't change classloader because can't create URL from file %1$s +isisfish.error.change.equation=Can't change equation +isisfish.error.check.region= +isisfish.error.compile.fileerror=File %s can't be compiled \! +isisfish.error.compile.script=Can't compile script\: %1$s +isisfish.error.compiled.parameter=Can't get rule parameter from compiled class +isisfish.error.conversion.data=Erreur lors de la conversion du fichier de donn\u00E9es +isisfish.error.create.equation=Can't create equation +isisfish.error.delete.database=Can't delete database +isisfish.error.delete.file=could not delete file %1$s +isisfish.error.delete.vcs.files=Can't delete vcs files +isisfish.error.during.simulation=Error during simulation +isisfish.error.emigration.negative=emigration negative +isisfish.error.empty.code.rubbin=rubbin's code is empty +isisfish.error.empty.emigration=emigration empty +isisfish.error.empty.id.geographic=goegraphic identifier is empty +isisfish.error.empty.immigration=immigration empty +isisfish.error.empty.migration=Migration empty +isisfish.error.empty.name=The name is empty +isisfish.error.empty.params.name=Parameter name is empty +isisfish.error.empty.population=Population is empty +isisfish.error.empty.scientific.name=scentific name is empty +isisfish.error.empty.season=info season empty +isisfish.error.empty.selectivity=selectivity is empty +isisfish.error.empty.species=specie capturable empty +isisfish.error.empty.species.name=specie's name is empty +isisfish.error.empty.unit=measure unit is empty +isisfish.error.equation.return.number=EquationImpl must retun a number\: %1$s +isisfish.error.evaluate.equation=Can't evaluate equation\: %1$s +isisfish.error.evaluate.preplan.script= +isisfish.error.evalute.plan.script=Can't evaluate plan script +isisfish.error.factor.invalid=Factor is not valid +isisfish.error.file.already.exists=The file %1$s already exist +isisfish.error.get.fisheryRegion=Can't get FisheryRegion +isisfish.error.growth.equation.before.create.group.population=Error, You must input growth equation before create the group population +isisfish.error.immigration.negative=immigration negative +isisfish.error.import.convertible=Erreur lors de l'import, la version du fichier que vous souhaitez importer n'est pas transformable en une version importable. +isisfish.error.import.file=Can't import file %1$s +isisfish.error.import.recent.files=Erreur lors de l'import, la version du fichier que vous souhaitez importer est plus r\u00E9cente que la version souhait\u00E9e. +isisfish.error.init.map=Can't init map. +isisfish.error.init.remove.button=could not init remove button (button or list is null) button \: %1$s, list \: %2$s +isisfish.error.instanciate=Can't instanciate %1$s +isisfish.error.instanciate.export=Can't instanciate export %1$s +isisfish.error.invalid.costs.fix=les co\u00FBts fixes sont invalides +isisfish.error.invalid.distribution.recruitment=distribution de recrutement invalide +isisfish.error.invalid.equation=Equation invalid +isisfish.error.invalid.equation.name=Invalid equation name +isisfish.error.invalid.file.name=The script name %1$s is not valid. +isisfish.error.invalid.interval.reproduction.recruitment=interval entre la reproduction et le recrutement invalide +isisfish.error.invalid.mean.weight=poids moyen invalide +isisfish.error.invalid.natural.death=natural mortality on classes naissantes invalide +isisfish.error.invalid.number=the number is invalid +isisfish.error.invalid.range=La gamme possible n'a pas de valeur acceptable +isisfish.error.invalid.values.params=Parametre controlable hors valeurs possibles +isisfish.error.invalidate.natural.death=natural mortality invalid +isisfish.error.invoke.method=Can't invoke method '%1$s' for class %2$s +isisfish.error.linkageerror.message=Isis-Fish has detected a script use error.\nCompilation directory has been deleted to force recompilation.\n\nPlease, restart Isis-Fish. +isisfish.error.linkageerror.title=Init error +isisfish.error.load.class=Can't load class\: %1$s +isisfish.error.load.classloader=Can't create ClassLoader for script, bad directory\: %1$s for reason %2$s +isisfish.error.load.file=could not load file %1$s +isisfish.error.load.map=Can't load map file\: %1$s +isisfish.error.log.closeAppender=could not close appender %1$s for category %2$s +isisfish.error.log.console.dispose=Une erreur est survenue pendant la fermeture de la console %1$s de log, raison %2$s +isisfish.error.log.createAppender=could not create appender [%1$s] \: %2$s for reason %3$s +isisfish.error.log.foundAppender=\=could not found log appender %1$s for category %2$s +isisfish.error.matrix.more.2d=Matrice de plus de 2 dimensions\!\!\nS\u00E9lectionnez moins d'\u00E9l\u00E9ments ou utilisez l'op\u00E9rateur somme. +isisfish.error.migration.negative=Migration negative +isisfish.error.no.matrix=No matrix for\: +isisfish.error.no.null.time.step=Error, the time step should not be null +isisfish.error.no.sector=No sector defined +isisfish.error.no.select.simulation=could not select simulation +isisfish.error.no.target.species=no target species in %1$s for %2$s +isisfish.error.not.found.code=could not found codeclass for %1$s +isisfish.error.not.found.description=could not found description for %1$s +isisfish.error.not.found.field=could not found field %1$s doc for %2$s +isisfish.error.not.found.field.class=could not found field %1$s for class %2$s +isisfish.error.not.null.class.grown=classe mature vaut nul +isisfish.error.not.null.mean.weight=poids moyen nul +isisfish.error.not.null.natiral.death=natural mortality null +isisfish.error.not.possible.metier=Pas de m\u00E9tier possible +isisfish.error.not.support.class=this class does not support +isisfish.error.number.classes.upper.zero=Error, the number of classes must be upper than 0 +isisfish.error.out.memory=Out of memory try with more memory (option -mx) +isisfish.error.overlap.season=Cette saison chevauche une autre saison +isisfish.error.parse.date=Can't parse date %1$s +isisfish.error.parse.long=Can't parse long %1$s +isisfish.error.plan.parameter=Can't get plan parameter from compiled class +isisfish.error.prepare.data=Can't prepare data +isisfish.error.prepare.information.simulation=Can't prepare information for simulation +isisfish.error.read.simulation=Can't read simulation information %1$s +isisfish.error.read.simulation.parameters=Can't read simulation parameters from file %1$s +isisfish.error.region.already.exists=This region already exists +isisfish.error.region.name.empty=Region name is empty +isisfish.error.remove.directory=Can't remove directory %1$s +isisfish.error.rename.region=Can't rename region to %1$s +isisfish.error.save.checkSum.compilation=Can't save checkSum to compilation\: %1$s +isisfish.error.save.region= +isisfish.error.save.script.compilation=Can't save script to compilation\: %1$s +isisfish.error.save.simulation.parameters=Can't save simulation parameters in file %1$s +isisfish.error.script.create=isisfish.error.script.create +isisfish.error.script.delete=Can't delete file %1$s for reason %2$s +isisfish.error.script.import=Can't import file for reason %1$s +isisfish.error.script.load=Can't load file %1$s for reason %2$s +isisfish.error.script.save=Can't save file %1$s for reason %2$s +isisfish.error.sensitivity.parameter= +isisfish.error.simulation.log.openAppender=could not open appender of simulation %1$s for reason %2$s +isisfish.error.simulation.remote.global=Can't launch a simulation on remote server +isisfish.error.simulation.remote.wrongportvalue=Connection port value is incorrect \: %s +isisfish.error.simulation.resultXml.close=Can't close simulation result XML for reason %1$s +isisfish.error.simulation.resultXml.open=Can't open simulation result XML for reason %1$s +isisfish.error.simulation.resultXml.write=Can't write simulation result XML for reason %1$s +isisfish.error.source.parameter=Can't get parameter from source +isisfish.error.strategy.order=Strategy %1$s don't have 12 StrategyMonthInfo but %2$s. Recreate them +isisfish.error.undefined.classes=No classes defined +isisfish.error.undefined.correspondence.zones.reproduction.recruitment=pas de correspondance entre les zones de reproduction et les zones de recrutement +isisfish.error.undefined.gear=The engin is not defined +isisfish.error.undefined.mesh=No mesh defined +isisfish.error.undefined.mesh.sector=No maille defined in sector +isisfish.error.undefined.meta.population=No population defined +isisfish.error.undefined.natural.death=No natural mortality on classes naissantes +isisfish.error.undefined.sector=No sector defined +isisfish.error.undefined.stategy=No strategy defined +isisfish.error.undefined.stategy.months=The strategy is not defined for some mounths +isisfish.error.undefined.zone.population=No population's zone defined +isisfish.error.undefined.zone.recruitment=No recrutment's zone defined +isisfish.error.undefined.zone.reproduction=No reprodution's zone defined +isisfish.error.unsupported.equation.langage=unsupported langage '%1$s' for equation\: %2$s +isisfish.error.wait.simThread=Can't wait SimThread +isisfish.error.warning.title=Warning +isisfish.error.write.simulation=Can't write information %1$s +isisfish.export.directory=Export directory +isisfish.export.saved=Export saved +isisfish.export.title=Results export +isisfish.factor.coefficient=Coefficient (in %) +isisfish.factor.comment=Comment +isisfish.factor.continue=Continuous factor +isisfish.factor.discret=Discret factor +isisfish.factor.equation.variable.action=Action +isisfish.factor.equation.variable.coefficient=Coef. (in %) +isisfish.factor.equation.variable.name=Name +isisfish.factor.equation.variable.operator=Operator +isisfish.factor.equation.variable.value=Value +isisfish.factor.factor=Factor +isisfish.factor.factors=Factors +isisfish.factor.firstValue=First value +isisfish.factor.increment=Cardinality +isisfish.factor.lastValue=Last value +isisfish.factor.name=Factor name +isisfish.factor.operateur=Operator +isisfish.factor.selectDiscretNumber=Number of factors +isisfish.factor.title=Factor input +isisfish.factor.validDiscretNumber=Ok +isisfish.factor.value=Value +isisfish.filter=Filter +isisfish.filter.apply=Apply filter +isisfish.filter.cancel=Cancel +isisfish.filter.log.levelDebug=Debug +isisfish.filter.log.levelError=Error +isisfish.filter.log.levelFatal=Fatal +isisfish.filter.log.levelInfo=Info +isisfish.filter.log.levelTrace=Trace +isisfish.filter.log.levelWarn=Warn +isisfish.filter.log.tooltip.levelDebug=Debug +isisfish.filter.log.tooltip.levelError=Error +isisfish.filter.log.tooltip.levelFatal=Fatal +isisfish.filter.log.tooltip.levelInfo=Info +isisfish.filter.log.tooltip.levelTrace=Trace +isisfish.filter.log.tooltip.levelWarn=Warn +isisfish.filter.log.tooltip.message=Enter a term to search and press Enter +isisfish.filter.reset=Reset +isisfish.filter.result=Results +isisfish.filter.result.found=Results (%d/%d) +isisfish.filter.select=filter.select +isisfish.filter.select.simulation=select.simulation +isisfish.filter.simulation=filter.simulation +isisfish.filter.simulation.analysePlanNumber=analysePlanNumber +isisfish.filter.simulation.description=description +isisfish.filter.simulation.local=local +isisfish.filter.simulation.numberOfYear=numberOfYear +isisfish.filter.simulation.regionName=regionName +isisfish.filter.simulation.simulationEnd=simulationEnd +isisfish.filter.simulation.simulationName=simulationName +isisfish.filter.simulation.simulationStart=simulationStart +isisfish.filter.simulation.simulatorName=simulatorName +isisfish.filter.simulation.tooltip.analysePlanNumber=filter.simulation.tooltip.analysePlanNumber +isisfish.filter.simulation.tooltip.description=filter.simulation.tooltip.description +isisfish.filter.simulation.tooltip.local=filter.simulation.tooltip.local +isisfish.filter.simulation.tooltip.numberOfYear=filter.simulation.tooltip.numberOfYear +isisfish.filter.simulation.tooltip.regionName=filter.simulation.tooltip.regionName +isisfish.filter.simulation.tooltip.simulationEnd=filter.simulation.tooltip.simulationEnd +isisfish.filter.simulation.tooltip.simulationName=filter.simulation.tooltip.simulationName +isisfish.filter.simulation.tooltip.simulationStart=filter.simulation.tooltip.simulationStart +isisfish.filter.simulation.tooltip.simulatorName=filter.simulation.tooltip.simulatorName +isisfish.filter.simulation.tooltip.useAnalysePlan=filter.simulation.tooltip.useAnalysePlan +isisfish.filter.simulation.tooltip.useOptimization=filter.simulation.tooltip.useOptimization +isisfish.filter.simulation.tooltip.usePreScript=filter.simulation.tooltip.usePreScript +isisfish.filter.simulation.tooltip.useStatistic=filter.simulation.tooltip.useStatistic +isisfish.filter.simulation.useAnalysePlan=filter.simulation.useAnalysePlan +isisfish.filter.simulation.useOptimization=filter.simulation.useOptimization +isisfish.filter.simulation.usePreScript=filter.simulation.usePreScript +isisfish.filter.simulation.useStatistic=filter.simulation.useStatistic +isisfish.fisheryRegion.addMap=Add map +isisfish.fisheryRegion.area=Fishery area boundaries +isisfish.fisheryRegion.comments=Comments +isisfish.fisheryRegion.delMap=Delete map +isisfish.fisheryRegion.latitude=Lat. +isisfish.fisheryRegion.latitude.max=Lat. max. +isisfish.fisheryRegion.latitude.min=Lat. min. +isisfish.fisheryRegion.longitude=Long. +isisfish.fisheryRegion.longitude.max=Long. max. +isisfish.fisheryRegion.longitude.min=Long. min. +isisfish.fisheryRegion.name=Region name +isisfish.fisheryRegion.ofCells=of cells (option) +isisfish.fisheryRegion.selectFile=Select a file +isisfish.fisheryRegion.spatial=Spatial resolution +isisfish.gear.comments=Comments +isisfish.gear.effortUnit=Effort Unit +isisfish.gear.name=Name +isisfish.gear.rangeValues=Range of values +isisfish.gear.standardisationFactor=Standardisation factor +isisfish.gear.technicalParameter=Technical parameter +isisfish.gear.title=Gear +isisfish.graphBean.graph.render=Choose a graph render +isisfish.graphBean.graphPanel=defaultToolTip-fr.ifremer.graph.GraphBean.graphPanel +isisfish.graphBean.graphRendererCombo=defaultToolTip-fr.ifremer.graph.GraphBean.graphRendererCombo +isisfish.graphBean.graphSplitPane=defaultToolTip-fr.ifremer.graph.GraphBean.graphSplitPane +isisfish.graphBean.label=defaultToolTip-fr.ifremer.graph.GraphBean.label1 +isisfish.graphBean.palettePanel=defaultToolTip-fr.ifremer.graph.GraphBean.palettePanel +isisfish.graphBean.scrolledwindow=defaultToolTip-fr.ifremer.graph.GraphBean.scrolledwindow1 +isisfish.graphBean.table=defaultToolTip-fr.ifremer.graph.GraphBean.table2 +isisfish.graphBean.table3=defaultToolTip-fr.ifremer.graph.GraphBean.table3 +isisfish.graphCombo.render.bar.horizontal=Rendu en barre horizontale +isisfish.graphCombo.render.bar.horizontal.stacked=Rendu en barre horizontale empilee +isisfish.graphCombo.render.bar.vertical=Rendu en barre verticale +isisfish.graphCombo.render.bar.vertical.3d=Rendu en barre verticale 3D +isisfish.graphCombo.render.bar.vertical.stacked=Rendu en barre verticale empilee +isisfish.graphCombo.render.line=Rendu en ligne +isisfish.graphCombo.render.min.max=Rendu en MinMax +isisfish.graphCombo.render.surface=Rendu en Aire +isisfish.infoItem..table=defaultToolTip-fr.ifremer.resultat.InfoItem.table29 +isisfish.infoItem.label=defaultToolTip-fr.ifremer.resultat.InfoItem.label +isisfish.infoItem.list=defaultToolTip-fr.ifremer.resultat.InfoItem.list +isisfish.infoItem.scrolledwindow=defaultToolTip-fr.ifremer.resultat.InfoItem.scrolledwindow1 +isisfish.infoItem.sum=defaultToolTip-fr.ifremer.resultat.InfoItemDate.sumButton +isisfish.infoItem.sum.year=Sum elements per year +isisfish.infoItem.table=defaultToolTip-fr.ifremer.resultat.InfoItem.table30 +isisfish.input.continueCells=Continue to cells +isisfish.input.continueGears=Continue to gears +isisfish.input.continueMetiers=Continue to metiers +isisfish.input.continuePopulations=Continue to populations +isisfish.input.continuePorts=Continue to ports +isisfish.input.continueSetOfVessels=Continue to set of vessels +isisfish.input.continueSpecies= +isisfish.input.continueStrategies=Continue to strategies +isisfish.input.continueTripTypes=Continue to trip type +isisfish.input.continueVesselTypes=Continue to vessel types +isisfish.input.continueZones=Continue to zones +isisfish.input.menu.addRegion=Add region +isisfish.input.menu.commit=Commit change +isisfish.input.menu.copyRegion=Copy Region +isisfish.input.menu.exportRegion=Export Region +isisfish.input.menu.importRegion=Import Region +isisfish.input.menu.importRegionSimulation=Import Region from simulation +isisfish.input.menu.importRegionV2=Import Region from v2 +isisfish.input.menu.importRenameRegion=Import Region and rename +isisfish.input.menu.removeLocaly=Remove localy +isisfish.input.menu.removeLocalyRemotely=Remove localy and remotely +isisfish.input.menu.server=Server +isisfish.input.newRegion=New region +isisfish.input.selectRegion=Select region +isisfish.input.title=Fishery input +isisfish.input.tree.cells=Cells +isisfish.input.tree.gears=Gears +isisfish.input.tree.metiers=Metiers +isisfish.input.tree.populations=Populations +isisfish.input.tree.ports=Ports +isisfish.input.tree.setofvessels=Set of vessels +isisfish.input.tree.species=Species +isisfish.input.tree.strategies=Strategies +isisfish.input.tree.triptypes=Trip types +isisfish.input.tree.vesseltypes=Vessel types +isisfish.input.tree.zones=Zones +isisfish.launch.anonymous=read only +isisfish.launch.email=email +isisfish.launch.firstname=firstname +isisfish.launch.init.done=init done in %1$s. +isisfish.launch.lasstname=lasstname +isisfish.launch.server.authenticationMethod=server access +isisfish.launch.server.login=server login +isisfish.launch.server.ssh.confirm.passphrase=confirm passphrase +isisfish.launch.server.ssh.key.change=Change your ssh key +isisfish.launch.server.ssh.key.generate=Generate ssh key +isisfish.launch.server.ssh.no.passphrase=no passphrase +isisfish.launch.server.ssh.passphrase=passphrase +isisfish.launch.server.ssh.privateKeyFile=private ssh key +isisfish.launch.server.ssh.publicKeyFile=public ssh key +isisfish.launch.ssh=read-write (ssh) +isisfish.launch.stop=Stopping simulation... +isisfish.launching=after init done in %1$s. +isisfish.log.addAppender=add appender [%1$s] +isisfish.log.body=Message to add +isisfish.log.closeAppender=closing appender %1$s for category %2$s +isisfish.log.mail.failed=Can't send report by mail. Is your mail server up ? (I'm trying to contact the < %1$s > smtp server) +isisfish.log.mail.send=A report has been sent to %1$s +isisfish.log.mail.send.title=Send simulation %1$s by email +isisfish.log.mailTo=Destination adress +isisfish.log.removeAppender=remove appender [%1$s] +isisfish.log.restoreLogLevel=swap back level for logger %1$s from level %2$s to level %3$s +isisfish.log.sendAll=Send the complete simulation archive +isisfish.log.sendMail=Send by email +isisfish.log.simulation.name=IsisFish simulation %1$s +isisfish.log.swapLogLevel=swap level for logger %1$s from level %2$s to level%3$s +isisfish.log.tooltip.body=The message will be join to email +isisfish.log.tooltip.mailTo=Enter destination adress +isisfish.log.tooltip.sendAll=Send the complete simulation archive, or just the log file +isisfish.log.tooltip.sendMail=Click here to send the email with files +isisfish.message.add.objets.simulation=Add new objets simulation +isisfish.message.backup.database.finished=backup database finished +isisfish.message.backup.database.progress=backup database in progress +isisfish.message.cancel.finished=Cancel finished +isisfish.message.check.finished=check finished +isisfish.message.check.region= +isisfish.message.checking.cell= +isisfish.message.choose.archive=choose archive file or directory +isisfish.message.commit.cancelled=commit cancelled +isisfish.message.commit.finished=commit finished +isisfish.message.commit.region.canceled=Commit region canceled +isisfish.message.commiting.region=Commiting region %1$s ... +isisfish.message.compilation.time=Compilation time %1$ss +isisfish.message.confirm.delete.object=Do you really want delete object %1$s +isisfish.message.confirm.remove.region=Do you really want to remove the region %1$s ? +isisfish.message.confirm.remove.script=Do you want to remove script '%1$s' ? +isisfish.message.copy.finished=Copy finished +isisfish.message.copy.region=Copy region to %1$s +isisfish.message.creating.region=Creating region %1$s +isisfish.message.creation.done=creation done %1$s +isisfish.message.creation.finished=Creation finished +isisfish.message.delete.canceled=delete canceled +isisfish.message.delete.entities=Delete entities +isisfish.message.delete.entity=Delete entity +isisfish.message.delete.finished=delete finished +isisfish.message.delete.object=To delete object %1$s, all next object will be deleted\n\n +isisfish.message.evaluation.finished=evaluation finished +isisfish.message.export.done=export done +isisfish.message.export.zip=Export to zip file %1$s +isisfish.message.file.overwrite=File exists, do you want overwrite it ? +isisfish.message.import=Import %1$s +isisfish.message.import.equation.convert=Manual equation convertion +isisfish.message.import.finished=Import finished +isisfish.message.import.region.name=Enter name for imported region +isisfish.message.import.region.xml=XMLed Region +isisfish.message.import.region.zipped=Zipped Region +isisfish.message.import.scripts.file.cancelled=Import scripts cancelled +isisfish.message.import.xml.v2.file=Import xml v2 file +isisfish.message.import.zip=Import zip file +isisfish.message.launchui.notlaunch= +isisfish.message.load.finished=load finished +isisfish.message.load.map=Try to load map file\: %1$s (%2$s, %3$s) +isisfish.message.loading.old.simulation=Loading old simulation ... +isisfish.message.loading.region=Loading region ... +isisfish.message.name.imported.region=Enter name for imported region +isisfish.message.new.filename=Enter the name of the new file. (use only chars and _ and start with uppercase) +isisfish.message.new.formule.category=Select the equation model's category +isisfish.message.new.formule.title=New equation model +isisfish.message.new.region.name=Enter new region name +isisfish.message.old.simulation.loaded=Old simulation loaded +isisfish.message.page.modified=This page has been modified, do you want to save it ? +isisfish.message.presimulation.script.execution=Presimulation Script execution +isisfish.message.recruitment.number.month=Input the number of month of recruitment +isisfish.message.region.commited=Region commited +isisfish.message.region.loaded=Region loaded +isisfish.message.region.remove.canceled=Region remove canceled +isisfish.message.region.removed=Region removed +isisfish.message.remove.canceled=Remove canceled +isisfish.message.remove.finished=Remove finished +isisfish.message.removing.region=Removing region %1$s ... +isisfish.message.result.verif.region=R\u00E9sultat de la v\u00E9rification de la r\u00E9gion +isisfish.message.save.finished=Save finished +isisfish.message.saveModel.finished=Save model finished +isisfish.message.script.commit=Enter commit message +isisfish.message.setting.cache.aspects=Setting Cache aspects +isisfish.message.setting.trace.aspects=Setting Trace aspects +isisfish.message.simulation.after=Result exports +isisfish.message.simulation.ended=Simulation ended +isisfish.message.simulation.execution=Simulation execution +isisfish.message.simulation.prepare=Preparing simulation +isisfish.message.tray.disabled=SystemTray disabled +isisfish.message.update.finished=update finished +isisfish.metier.comments=Comments +isisfish.metier.name=Name +isisfish.metier.rangeValues=Range of values +isisfish.metier.title=Metier +isisfish.metierMonitor.metiers=Metiers +isisfish.metierMonitor.strategies=Strategies +isisfish.metierSeasonInfo.toString=%1$s season %2$s-%3$s +isisfish.metierSeasonInfoSpecies.mainSpecies=Main species for the metier +isisfish.metierSeasonInfoSpecies.selectSeason=Select a season +isisfish.metierSeasonInfoSpecies.selectSpecies=Select a species +isisfish.metierSeasonInfoSpecies.species=Species +isisfish.metierSeasonInfoSpecies.targetFactor=Target factor +isisfish.metierSeasonInfoSpecies.title=Catchable species +isisfish.metierSeasonInfoZone.comments=Comments +isisfish.metierSeasonInfoZone.season=Season +isisfish.metierSeasonInfoZone.selectSeason=Select a season +isisfish.metierSeasonInfoZone.title=Seasons / Zones +isisfish.monitor.title=Application Monitor +isisfish.month.april=april +isisfish.month.august=august +isisfish.month.december=december +isisfish.month.february=february +isisfish.month.january=january +isisfish.month.july=july +isisfish.month.june=june +isisfish.month.march=march +isisfish.month.may=may +isisfish.month.november=november +isisfish.month.october=october +isisfish.month.september=september +isisfish.params.changeLogLev=Change from level '%1$s' to level '%2$s' +isisfish.params.clearFilter=Clear filter +isisfish.params.description=Description +isisfish.params.filter=Filter +isisfish.params.lblLauncher=Simulation launcher +isisfish.params.loadOldSimulation=Load old simulation +isisfish.params.numberYear=Number of year +isisfish.params.onlyExportSimulation=Only export simulation +isisfish.params.populationNumbers=Population numbers input +isisfish.params.ruleParameters=Rule's parameters +isisfish.params.sensitivityName=Sensitivity name +isisfish.params.simulationName=Simulation name +isisfish.params.title=Parameters +isisfish.params.toString.fishery=P\u00EAcherie\: %1$s\n\n +isisfish.params.toString.lib.logger.level=Level of libraries' logger %1$s +isisfish.params.toString.number.years=Number of years\: %1$s\n\n +isisfish.params.toString.plan=Plan\: %1$s +isisfish.params.toString.plan.number=Analyse plan sequence number\: %1$s\n\n +isisfish.params.toString.populations=Populations\: +isisfish.params.toString.rule=Rule\: %1$s +isisfish.params.toString.script.logger.level=Level of scripts' logger %1$s +isisfish.params.toString.script.presimulation=Script de presimulation +isisfish.params.toString.simul.logger.level=Level of simulator's logger %1$s +isisfish.params.toString.simulation.done=Simulation done with %1$s\: +isisfish.params.toString.strategies=Strat\u00E9gies d'exploitation\: +isisfish.params.useAnalysePlan=Use simulation plan +isisfish.params.usePreSimulationScript=Use pre simulation script +isisfish.population.capturability=Capturability +isisfish.population.comments=Comments +isisfish.population.group=Group +isisfish.population.groups=Groups +isisfish.population.mappingZoneReproZoneRecru=MappingZoneReproZoneRecru +isisfish.population.matrixAbundance=Abundance matrix +isisfish.population.matrixAbundance1D=matrixAbundance1D +isisfish.population.recruitment=Recruitment +isisfish.population.reproduction=Reproduction +isisfish.population.season=Season +isisfish.population.zones=Zones +isisfish.populationBasics.geographicID=Geographic identifier +isisfish.populationBasics.growth=Growth +isisfish.populationBasics.growthReverse=Reverse growth +isisfish.populationBasics.maturityGroup=Maturity group +isisfish.populationBasics.name=Name +isisfish.populationBasics.numberGroup=Number of group +isisfish.populationBasics.plusGroup=Plus group +isisfish.populationBasics.recreateClasses=Recreate classes +isisfish.populationBasics.title=Population input +isisfish.populationCapturability.comments=Comments +isisfish.populationCapturability.selectCoefficient=Select a coefficient per season and per class +isisfish.populationCapturability.title=Capturability input +isisfish.populationEquation.meanWeight=Mean weight +isisfish.populationEquation.naturalDeathRate=Natural death rate +isisfish.populationEquation.price=Price +isisfish.populationEquation.title=Equations input +isisfish.populationGroup.age=Age +isisfish.populationGroup.comments=Comments +isisfish.populationGroup.length=Length +isisfish.populationGroup.maximumLength=Maximum length +isisfish.populationGroup.meanWeigth=Mean Weigth +isisfish.populationGroup.minimumLength=Minimum length +isisfish.populationGroup.naturalDeathRate=Natural death rate +isisfish.populationGroup.price=Price +isisfish.populationGroup.reproductionRate=Reproduction rate +isisfish.populationGroup.title=Population group input +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.departureZone=Departure Zone +isisfish.populationMigrationEmigration.title=Population emigration +isisfish.populationMigrationImmigration.arrivalZone=Arrival Zone +isisfish.populationMigrationImmigration.coefficient=Coefficient +isisfish.populationMigrationImmigration.title=Population immigration +isisfish.populationMigrationMigration.arrivalZone=Arrival zone +isisfish.populationMigrationMigration.coefficient=Coefficient +isisfish.populationMigrationMigration.departureZone=Departure zone +isisfish.populationMigrationMigration.title=Population migration +isisfish.populationRecruitment.comments=Comments +isisfish.populationRecruitment.monthgapgetweenreprorecruitment=Month gap between repro and recruitment +isisfish.populationRecruitment.recruitmentDistribution=Recruitment distribution +isisfish.populationRecruitment.reproductionEquation=Reproduction equation +isisfish.populationRecruitment.title=Recruitment input +isisfish.populationSeasonInfo.arrival=Arrival +isisfish.populationSeasonInfo.departure=Departure +isisfish.populationSeasonInfo.distributionSpawing=Distribution of spawing +isisfish.populationSeasonInfo.emigration=Emigration +isisfish.populationSeasonInfo.group=Group +isisfish.populationSeasonInfo.immigration=Immigration +isisfish.populationSeasonInfo.migration=Migration +isisfish.populationSeasonInfo.months=Months +isisfish.populationSeasonInfo.toString=%1$s season %2$s-%3$s +isisfish.populationSeasons.Reproduction=Reproduction +isisfish.populationSeasons.changeGroup=Change of group +isisfish.populationSeasons.comments=Comments +isisfish.populationSeasons.computeCoefficient=Calculate coefficient +isisfish.populationSeasons.distributionSpawning=Distribution of spawning +isisfish.populationSeasons.noSpacialized=Not spacialized +isisfish.populationSeasons.selectSeason=Select a season +isisfish.populationSeasons.showSpacialized=Show the spacialized +isisfish.populationSeasons.spacialized=Spacialized +isisfish.populationSeasons.spacialized.visualisation=Spacialized +isisfish.populationSeasons.title=Saisons +isisfish.populationZones.betweenSpawningRecruitmentAreas=Match between spawning and recruitment areas +isisfish.populationZones.selectPopulationAreas=Select the population areas +isisfish.populationZones.selectRecruitmentAreas=Select the recruitment areas +isisfish.populationZones.selectSpawningAreas=Select the spawning areas +isisfish.populationZones.title=Zones +isisfish.port.cell=Port cell +isisfish.port.comments=Comments +isisfish.port.name=Name +isisfish.preScript.backParameter=Back to parameter tab +isisfish.preScript.title=Pre simulation script +isisfish.queue.clearDone=Clear done jobs +isisfish.queue.id=Id +isisfish.queue.launcher=Simulation launcher +isisfish.queue.masterplan=Master plan +isisfish.queue.notstarted=Not started +isisfish.queue.plan=Plan +isisfish.queue.progression=Progress +isisfish.queue.restartSimulation=Restart +isisfish.queue.showLog=Show simulation log +isisfish.queue.simulationLaunch=Simulation queue launch +isisfish.queue.status=Status +isisfish.queue.stopSimulation=Stop simulation +isisfish.queue.title=Queue +isisfish.result.abundance=Abondance +isisfish.result.add=Add a result +isisfish.result.begin.simulation=En debut de Simulation\: +isisfish.result.capture=Capture +isisfish.result.capture.metier=Capture par metier +isisfish.result.choose.simulation=Choose a Simulation +isisfish.result.datas=Datas +isisfish.result.datasRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.donneeRadioButton +isisfish.result.desktopPane=defaultToolTip-fr.ifremer.resultat.ResultatView.desktopPane +isisfish.result.dimension=Dimension +isisfish.result.end.simulation=Simuation end \: +isisfish.result.export=Export +isisfish.result.export.file=Export text file +isisfish.result.file=File +isisfish.result.graph=Graph +isisfish.result.graphRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.graphRadioButton +isisfish.result.hpaned=defaultToolTip-fr.ifremer.resultat.ResultatEdit.hpaned2 +isisfish.result.infoPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.infoPanel +isisfish.result.label=defaultToolTip-fr.ifremer.resultat.ResultatView.label9 +isisfish.result.map=Map +isisfish.result.mapRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.mapRadioButton +isisfish.result.menuExport=defaultToolTip-fr.ifremer.resultat.ResultatEdit.menuExport +isisfish.result.menubar=defaultToolTip-fr.ifremer.resultat.ResultatView.menubar1 +isisfish.result.menuitem=defaultToolTip-fr.ifremer.resultat.ResultatView.menuitem2 +isisfish.result.new.window=Open a new window +isisfish.result.openWindowButton=defaultToolTip-fr.ifremer.resultat.ResultatView.openWindowButton +isisfish.result.quit=Quitter +isisfish.result.reject.metier=Rejet par metier +isisfish.result.remove.simulation=Remove simulation +isisfish.result.removeSimulationButton=defaultToolTip-fr.ifremer.resultat.ResultatView.supprimerSimulationButton +isisfish.result.resultat=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resultat +isisfish.result.scroll=defaultToolTip-fr.ifremer.resultat.ResultatEdit.scroll +isisfish.result.show.simulation.log=Show logs +isisfish.result.simulation=defaultToolTip-fr.ifremer.resultat.ResultatView.simulation +isisfish.result.statusBar=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusbar1 +isisfish.result.statusImage=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusImage +isisfish.result.stress.metier=Effort par metier +isisfish.result.summary=Summary +isisfish.result.summaryRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resumeRadioButton +isisfish.result.table=defaultToolTip-fr.ifremer.resultat.ResultatView.table33 +isisfish.result.title=Results +isisfish.result.tooltip.show.simulation.log=Click to display the log console of the simulation +isisfish.result.unload.metier=Debarquement par metier +isisfish.result.vbox=defaultToolTip-fr.ifremer.resultat.ResultatView.vbox1 +isisfish.result.viewPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.viewPanel +isisfish.resultChoice.save=Results to save +isisfish.resultChoice.saved=Results saved +isisfish.resultChoice.title=Result choice +isisfish.resume.matrixInfoGrid=defaultToolTip-fr.ifremer.resultat.ResumePanel.matriceInfoGrid +isisfish.resume.resumeTextArea=defaultToolTip-fr.ifremer.resultat.ResumePanel.resumeTextArea +isisfish.resume.scrolledwindow=defaultToolTip-fr.ifremer.resultat.ResumePanel.scrolledwindow2 +isisfish.resume.table=defaultToolTip-fr.ifremer.resultat.ResumePanel.table1 +isisfish.script.check=Check +isisfish.script.commit=Commit +isisfish.script.compilation.failed=%s +isisfish.script.compilation.ok=Compilation complete.\n---------------------\n\n%s +isisfish.script.copy=Copy +isisfish.script.cut=Cut +isisfish.script.evaluate=Evaluate +isisfish.script.export=export +isisfish.script.export.cancel=cancel +isisfish.script.export.checkAll=checkAll +isisfish.script.export.chooseDir=chooseDir +isisfish.script.export.ok=ok +isisfish.script.export.tooltip.checkAll= +isisfish.script.export.tooltip.chooseDir= +isisfish.script.import=import +isisfish.script.import.cancel=cancel +isisfish.script.import.checkAll=checkAll +isisfish.script.import.labelAdd=labelAdd +isisfish.script.import.labelOverwrite=labelOverwrite +isisfish.script.import.ok=ok +isisfish.script.import.tooltip.checkAll= +isisfish.script.menu.checkSyntax=CheckSyntax +isisfish.script.menu.code=Code +isisfish.script.menu.commit=Commit script to server +isisfish.script.menu.copy=Copy +isisfish.script.menu.cut=Cut +isisfish.script.menu.deleteLocaly=Delete localy +isisfish.script.menu.deleteLocalyServer=Delete localy and on server +isisfish.script.menu.diff=Display diff with server version +isisfish.script.menu.edit=Edit +isisfish.script.menu.evaluate=Evaluate +isisfish.script.menu.file=File +isisfish.script.menu.new=New +isisfish.script.menu.paste=Paste +isisfish.script.menu.save=Save +isisfish.script.menu.txtExport=Export +isisfish.script.menu.txtImport=Import +isisfish.script.menu.txtNewAnalysePlan=New analyse plan +isisfish.script.menu.txtNewEquationModel=New equation model +isisfish.script.menu.txtNewExport=New export +isisfish.script.menu.txtNewRule=New rule +isisfish.script.menu.txtNewScript=New script +isisfish.script.menu.txtNewSensitivity=New sensitivity calculator +isisfish.script.menu.txtNewSimulator=New simulator +isisfish.script.menu.txtVCS=Server +isisfish.script.menu.update=Update from server +isisfish.script.new=New +isisfish.script.paste=Paste +isisfish.script.save=Save +isisfish.script.title=Script Editor +isisfish.script.txtExport=Export +isisfish.season.toString=season %1$s-%2$s +isisfish.selectivity.equation=Equation +isisfish.selectivity.selectPopulation=Select a population +isisfish.selectivity.title=Selectivity +isisfish.sens.backParameter=Back to parameter tab +isisfish.sens.title=Simulation plan +isisfish.sensitivity.displaysecondpass=Display results +isisfish.sensitivity.export=Export +isisfish.sensitivity.secondpass=Analyze results +isisfish.sensitivity.secondpass.title=Analyze results +isisfish.sensitivity.select=Method +isisfish.sensitivity.title=Sensitivity analysis +isisfish.sensitivityChooser.title=Sensitivities input +isisfish.server.ssh.generateKey.title=Generate Ssh key +isisfish.setOfVessels.comments=Comments +isisfish.setOfVessels.fixedCosts=Fixed costs +isisfish.setOfVessels.name=Name +isisfish.setOfVessels.numberOfVessels=Number of vessels +isisfish.setOfVessels.technicalEfficiency=Technical efficiency +isisfish.setOfVessels.title=Caracteristics +isisfish.setOfVessels.vesselType=Vessel type +isisfish.simpleResult.legendPanel=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.legendPanel +isisfish.simpleResult.more.information=Clic a cell for more information... +isisfish.simpleResult.resultatMap=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMap +isisfish.simpleResult.resultatMapToolBar=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMapToolBar +isisfish.simpleResult.table=defaultToolTip-fr.ifremer.isisfish.map.SimpleResultatMapBean.table12 +isisfish.simulation.log.console.title=Log console for simulation '%1$s' +isisfish.simulation.log.showConsole=display log console for simulation %1$s +isisfish.simulation.menu.import=Restor simulation parameter +isisfish.simulation.menu.save=Save simulation parameter +isisfish.simulation.menu.simulation=Simulation +isisfish.simulation.name=Simulation name +isisfish.simulation.remote.message.connection=Connecting to Caparmor +isisfish.simulation.remote.message.downloadresults=Downloading results +isisfish.simulation.remote.message.upload=Uploading simulation +isisfish.simulation.remote.message.waitingavailable=Waiting for available resource. +isisfish.simulation.remote.message.waitingstart=Waiting for simulation start +isisfish.simulation.restarting=Restarting... +isisfish.simulation.title=Simulation launcher +isisfish.simulator.launcher.inprocess=in current process +isisfish.simulator.launcher.remote=on Caparmor server +isisfish.simulator.launcher.subprocess=in subprocess +isisfish.simulator.simulaction.badid=Can't start simulation, bad id\: %s +isisfish.simulator.ssh.configuration.connecting=Connection... +isisfish.simulator.ssh.configuration.connectingpk=Connection with public key... +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.invalidpassphrase=Invalid passphrase +isisfish.simulator.ssh.configuration.keygenerate=Generate +isisfish.simulator.ssh.configuration.test=Test configuration +isisfish.simulator.ssh.configuration.title=Caparmor launcher configuration +isisfish.simulator.subprocess.readoutput.error= +isisfish.species.age=Age +isisfish.species.cee=CEE +isisfish.species.comments=Comments +isisfish.species.length=Length +isisfish.species.name=Species name +isisfish.species.rubbinCode=Rubbin code +isisfish.species.scientificName=Scientific name +isisfish.species.structured=Structured +isisfish.ssh.askpassphrase.message=Enter passphrase for key '%s' \: +isisfish.ssh.askpassphrase.title=SSH key unlocking +isisfish.ssh.askpassphrase.wrongpassphrase=Wrong passphrase, enter a new one for key '%s' \: +isisfish.strategy.comments=Comments +isisfish.strategy.inactivity=Inactivity equation +isisfish.strategy.inactivityEquationUsed=Use inactivity equation +isisfish.strategy.name=Name +isisfish.strategy.proportionSetOfVessels=Set of vessels proportion +isisfish.strategy.title=Caracteristics +isisfish.strategyMonthInfo.metier=Metier +isisfish.strategyMonthInfo.minInactivityDays=Min inactivity days +isisfish.strategyMonthInfo.numberOfTrips=Number of trips +isisfish.strategyMonthInfo.proportion=Proportion +isisfish.strategyMonthInfo.title=StrategyMonthInfo +isisfish.strategyMonthInfo.toString=%1$s %2$s +isisfish.timeUnit.day=Day +isisfish.timeUnit.hours=Hours +isisfish.tray.simulation=Isis-fish - %1$s \: %2$s/%3$s +isisfish.tray.simulation.no=Isis-fish - No simulation +isisfish.tripType.comments=Comments +isisfish.tripType.duration=Duration +isisfish.tripType.minTime=Minimum time between trips +isisfish.tripType.name=Name +isisfish.vcs.ask.passphrase=Enter your pass phrase (if your private key have one). +isisfish.vcs.ask.passphrase.title=Ask your pass phrase +isisfish.vcs.commit=vcs.commit +isisfish.vcs.commit.cancel=vcs.commit.cancel +isisfish.vcs.commit.label=vcs.commit.label +isisfish.vcs.commit.ok=vcs.commit.ok +isisfish.vcs.init.notfoundcantdownload=No database version %s found and can't get it.\nYou must go to ISIS-Fish web site and download database manually. +isisfish.vcs.init.wrongprotocol=Your database repository\: %s\n don't use correct protocol.\nDo you want to make backup of your database and take the correct one ? +isisfish.vcs.switchprotocol.confirm=Protocol to access repository script has changed.\nDo you want to switch your repository ? +isisfish.vcs.switchtag.warningconflict=Your repository is now up-to-date, but following files are conflicted, you may check them \: +isisfish.vcs.switchversion.confirm=You don't use correct repository script for your application version %s.\nDo you want to switch your repository ? +isisfish.vcs.update=vcs.update +isisfish.vcs.update.cancel=cancel +isisfish.vcs.update.checkAll=checkAll +isisfish.vcs.update.local=local +isisfish.vcs.update.local.modified=modified +isisfish.vcs.update.local.outofdateAndModified=outofdateAndModified +isisfish.vcs.update.local.tooltip.modified= +isisfish.vcs.update.local.tooltip.outofdateAndModified= +isisfish.vcs.update.local.tooltip.unversionned= +isisfish.vcs.update.local.unversionned=unversionned +isisfish.vcs.update.ok=ok +isisfish.vcs.update.remote=remote +isisfish.vcs.update.remote.missing=missing +isisfish.vcs.update.remote.outofdate=outofdate +isisfish.vcs.update.remote.tooltip.missing= +isisfish.vcs.update.remote.tooltip.outofdate= +isisfish.vcs.update.tooltip.checkAll=checkAll +isisfish.vcs.update.tooltip.local= +isisfish.vcs.update.tooltip.remote= +isisfish.vcs.update.warningconflict=Your repository is now up-to-date, but following files are conflicted, you may check them \:\n +isisfish.vcs.updateconfirm=updateconfirm +isisfish.vcs.updateconfirm.cancel=cancel +isisfish.vcs.updateconfirm.checkAll=checkAll +isisfish.vcs.updateconfirm.label= +isisfish.vcs.updateconfirm.label2= +isisfish.vcs.updateconfirm.ok=ok +isisfish.vcs.updateconfirm.tooltip.checkAll= +isisfish.vcs.updaterepository.confirm=Your repository is not up to date.\nDo you want to update following files ? +isisfish.vcs.vcssvn.add.error=Can't add file +isisfish.vcs.vcssvn.add.errorreadonly=You can't add file, this repository is readonly +isisfish.vcs.vcssvn.checkProtocol.error=Can't get address on serveur of local repository +isisfish.vcs.vcssvn.checkProtocol.relocate=Relocate repository %s from %s to %s +isisfish.vcs.vcssvn.checkout.error=Can't checkout +isisfish.vcs.vcssvn.cleanup.error=Can't cleanup working copy +isisfish.vcs.vcssvn.commit.error=Can't commit files +isisfish.vcs.vcssvn.commit.errorreadonly=You can't commit file, this repository is readonly +isisfish.vcs.vcssvn.delete.error=Can't delete file +isisfish.vcs.vcssvn.delete.errorreadonly=You can't delete file, this repository is readonly +isisfish.vcs.vcssvn.diff.error=Can't get diff +isisfish.vcs.vcssvn.gettag.error=Can't get address on serveur of local repository +isisfish.vcs.vcssvn.getupdate.error=Can't status file +isisfish.vcs.vcssvn.global.filelocalandremotestatus=file %s status is (l\:%s/r\:%s) +isisfish.vcs.vcssvn.global.filestatus=status for %s is %s +isisfish.vcs.vcssvn.global.foundUpdatedFile=add %s as updated file +isisfish.vcs.vcssvn.global.torevision=At revision \: %d +isisfish.vcs.vcssvn.isconnected.switchoff=Can't connect to serveur, switch to off line\: %s +isisfish.vcs.vcssvn.isconnected.switchto=Connection to serveur available, switch on line\: %s +isisfish.vcs.vcssvn.isonremote.error=file %s is not on server +isisfish.vcs.vcssvn.istag.notexist=Tag %s don't exist +isisfish.vcs.vcssvn.isuptodate.error=Can't get file status +isisfish.vcs.vcssvn.list.error=Can't list files +isisfish.vcs.vcssvn.localstatus.error=Can't status file +isisfish.vcs.vcssvn.remotestatus.error=Can't status file +isisfish.vcs.vcssvn.setTag.error=Can't get address on server of local repository +isisfish.vcs.vcssvn.settag.switchfromto=Switch repository tag from %s to %s +isisfish.vcs.vcssvn.update.error=Can't update files +isisfish.vcs.vcssvn.update.notinlocal=Can't update file that not in local repository +isisfish.versionStorage.removed=Removed +isisfish.vesselType.activityRange=Activity range +isisfish.vesselType.comments=Comments +isisfish.vesselType.fuelCost=Fuel cost of travel +isisfish.vesselType.length=Length +isisfish.vesselType.maxDuration=Maximum trip duration +isisfish.vesselType.miniCrew=Minimum crew size +isisfish.vesselType.name=Name +isisfish.vesselType.speed=Speed +isisfish.welcome.menu.about=About +isisfish.welcome.menu.api=API +isisfish.welcome.menu.close=Close +isisfish.welcome.menu.configuration=Configuration +isisfish.welcome.menu.configuration.sshlauncher=Caparmor configuration +isisfish.welcome.menu.configuration.vcs=VCS Configuration +isisfish.welcome.menu.file=File +isisfish.welcome.menu.frame=Window +isisfish.welcome.menu.help=Help +isisfish.welcome.menu.help.isisfish=Isis-Fish Website +isisfish.welcome.menu.help.isisfishapi=Isis-Fish API +isisfish.welcome.menu.help.javaapi=Java API +isisfish.welcome.menu.help.lutinmatrixapi=LutinMatrix API +isisfish.welcome.menu.help.topiaapi=ToPIA API +isisfish.welcome.menu.input=Input +isisfish.welcome.menu.monitor=Logs frame +isisfish.welcome.menu.queue=Simulation queue +isisfish.welcome.menu.result=Result +isisfish.welcome.menu.script=Script +isisfish.welcome.menu.simulation=Simulation launcher +isisfish.welcome.menu.synchro=Server synchronization +isisfish.welcome.title=Ifremer Simulation +isisfish.wizardGroupCreation.allGroupsSameSize=All groups have the same size +isisfish.wizardGroupCreation.allValues=Input all the values +isisfish.wizardGroupCreation.computedGrowthCurve=Computed by a growth curve +isisfish.wizardGroupCreation.firstAge=First age +isisfish.wizardGroupCreation.firstAgeHelp=First age \= minimal age +isisfish.wizardGroupCreation.firstGroup=First group +isisfish.wizardGroupCreation.firstLength=First length +isisfish.wizardGroupCreation.firstLengthHelp=First length \= minimal length of first group +isisfish.wizardGroupCreation.gapBetweenGroupsHelp=gap between to group is 1 year. +isisfish.wizardGroupCreation.groupWidth=Group width +isisfish.wizardGroupCreation.groupWidthHelp=Group width \= width of group +isisfish.wizardGroupCreation.lastAge=Last age +isisfish.wizardGroupCreation.lastAgeHelp=Last age \= maximal age +isisfish.wizardGroupCreation.maxGroupsLength=Maximal groups length +isisfish.wizardGroupCreation.maxGroupsLengthHelp=A semicolon ';' must separe maximal length of each group +isisfish.wizardGroupCreation.numberGroup=Number of group +isisfish.wizardGroupCreation.numberGroupHelp=number of Group \= number of group wanted +isisfish.wizardGroupCreation.numberGroups=Number of groups +isisfish.wizardGroupCreation.populationCharacteristics=Input the population characteristics +isisfish.wizardGroupCreation.selectGroupLengthType=Select group length type +isisfish.wizardGroupCreation.timeStep=Time step (in month) +isisfish.wizardGroupCreation.title=Group creation +isisfish.wizardGroupCreation.undefinedGrowthEquation=The equation used is the population's growth curve, it needs to be defined first. +isisfish.zone.cells=Zone cells +isisfish.zone.comments=Comments +isisfish.zone.name=Name +region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= +simulate\ %s\ with\ file\ %s= Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,1111 +0,0 @@ -Add\ to\ %s\ queue= -Add\ to\ default\ queue= -Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s= -Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s -Can't\ add\ simulation\:\ = -Can't\ create\ simulation\ logger=Can't create simulation logger -Can't\ delete\ simulation\ %s\ = -Can't\ do\ post\ action\ %s= -Can't\ do\ simulation\ %s= -Can't\ download\ archive\ \:\ %s= -Can't\ download\ file= -Can't\ evaluate\ simulation\ prescript= -Can't\ export\ simulation\ %s= -Can't\ get\ changlog=Impossible d'obtenir de changelog -Can't\ get\ result\:\ %1$s=Can't get result\: %1$s -Can't\ instanciate\ export\ %1$s=Can't instanciate export %1$s -Can't\ instanciate\ wanted\ VCS\ (%s),\ use\ default= -Can't\ instantiate\ %s= -Can't\ open\ log\ for\ %s= -Can't\ read\ ssh\ key\ \:\ %s= -Can't\ simulate\ %s= -Check\ state\ of\ local\ repository\:\ %s= -Check\ syntax\ of\ the\ current\ script= -Checkout\ pom.xml\ to\ %s= -Command\ '%s'\ fail\ to\ execute= -Commit\ script\ to\ CVS\ server= -Copy\ current\ selection\ (Ctrl-c)= -Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s= -Create\ a\ new\ script= -Cut\ current\ selection\ (Ctrl-x)= -Error\ during\ vcs\ initialisation= -Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys= -Export\ selected\ script(s)\ to\ zip\ archive= -Generate\ next\ simulation= -Import\ one\ java\ file\ script\ source= -Import\ simulation\ file\ %s\ in\ directory\ %s\ and\ rename\ from\ %s\ to\ %s= -Import\ zipped\ file\ containing\ all\ scripts\ directory\ structure= -Info=Info -Jobs\ submited\ is\ not\ ItemSimulation\ but\ was\ %s= -Last\ entry\ was\ %s\ extract\ name\ %s= -Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)= -Local\ repository\ don't\ exist= -Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s= -Normal\ stop\ thread,\ this\ is\ not\ an\ error= -Not\ start\ simulation\ %s\ because\ user\ ask\ stop= -Paste\ current\ selection\ (Ctrl-v)= -Process\ template\ error= -Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= -Region\ %s\ already\ inited=La r\u00E9gion %s a d\u00E9j\u00E0 \u00E9t\u00E9 initialis\u00E9e -Remote\ IsisFish\ server= -Remote\ control\ file\ doesn't\ exists\ %s= -Remote\ information\ file\ doesn't\ exists\ %s= -Rename\ data\ directory\ to\ %s= -Save\ current\ script= -Show\ help= -SimulationExecutor\ started\ with\ %s\ thread\ for\ %s= -Ssh\ key\ found\ '%s'\ will\ be\ used\ to\ connect\ to= -Stop\ simulation\ plan,\ because\ can't\ call\ afterSimulation\ correctly\ on\ plan\ %s= -Stop\ the\ process= -SubProcess\ start\:\ %s\ %s= -Switch\ repository\ type\ to\ none= -Try\ to\ eval\ current\ script\ (must\ be\ have\ main\ method)= -Try\ to\ log\ on\ %s@%s\:%d= -Use\ branches,\ switch\ not\ needed= -User\ restart\ simulation\ %s= -User\ stop\ simulation\ %s= -could\ not\ close\ reader\ %1$s=could not close reader %1$s -could\ not\ create\ simulation\ filter\ model\ for\ reason\ %1$s=could not create simulation filter model for reason %1$s -could\ not\ filter\ on\ simulations=could not filter on simulations -could\ not\ found\ %s= -could\ not\ found\ log\ file\ %1$s=could not found log file %1$s -could\ not\ found\ region\ %s= -could\ not\ found\ simulation\ %s= -could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s -destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= -destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite= -directory\ %s\ must\ be\ a\ directory= -filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines. -in\ hour= -isisfish.about.abouthtmltext=<html><b>Isis-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2009.<br /><br /><a href\="http\://isis-fish.labs.libre-entreprise.org">http\://isis-fish.labs.libre-entreprise.org</a><br /><br />Merci de rapporter les bugs.<html> -isisfish.about.licensetext=Vous pouvez modifier et redistribuer ce programme sous les conditions \u00E9nonc\u00E9es par la licence GNU GPL (version 2 ou ult\u00E9rieure). Une copie de la licence GPL est dans le fichier \u00AB\u00A0LICENSE.txt\u00A0\u00BB fourni avec Isis-Fish. Tous droits r\u00E9serv\u00E9s. Aucune garantie n'est fournie pour l'utilisation de ce programme. -isisfish.about.title=\u00C0 propos de Isis-Fish... -isisfish.advancedParameters.title=Param\u00E8tres avanc\u00E9s -isisfish.advancedParams.freeParameters=Param\u00E8tres libres -isisfish.advancedParams.libLevelLogger=Niveau de tracage des librairies -isisfish.advancedParams.scriptLevelLogger=Niveau de tracage des scripts -isisfish.advancedParams.simulLevelLogger=Niveau de tracage du simulateur -isisfish.advancedParams.simulationCache=Simulation cache -isisfish.advancedParams.simulationStatistique=Simulation statistique -isisfish.advancedParams.simulatorUse=Simulateur \u00E0 utiliser -isisfish.cell.comments=Commentaires -isisfish.cell.land=Terre -isisfish.cell.latitude=Latitude -isisfish.cell.longitude=Longitude -isisfish.cell.name=Nom -isisfish.change.equation=Ne peut pas changer l'\u00E9quation -isisfish.commit.message=Entrer un message de commit -isisfish.common.add=Ajouter -isisfish.common.add.short=Aj. -isisfish.common.alert=alerte -isisfish.common.apply=Appliquer -isisfish.common.blank=\ -isisfish.common.cancel=Annuler -isisfish.common.check=V\u00E9rifier -isisfish.common.clear=Effacer -isisfish.common.date=Date -isisfish.common.debug=Debug -isisfish.common.delete=Supprimer -isisfish.common.ellipsis=... -isisfish.common.emigration=\u00E9migration -isisfish.common.equation=Equation -isisfish.common.error=Erreur -isisfish.common.finish=Terminer -isisfish.common.gear=Engin -isisfish.common.immigration=immigration -isisfish.common.info=Info -isisfish.common.migration=migration -isisfish.common.month=mois %1$s -isisfish.common.name=Nom -isisfish.common.new=Nouveau -isisfish.common.newMatrix=Nouvelle matrice -isisfish.common.next=Suivant -isisfish.common.ok=Ok -isisfish.common.openEditor=Ouvrir l'\u00E9diteur -isisfish.common.population=Population -isisfish.common.populationGroup=Groupe de population -isisfish.common.populations=Populations -isisfish.common.port=port -isisfish.common.prev=Pr\u00E9c\u00E9dent -isisfish.common.region=R\u00E9gion -isisfish.common.remove=Supprimer -isisfish.common.reset=R\u00E9initialiser -isisfish.common.rules=R\u00E8gles -isisfish.common.save=Sauver -isisfish.common.saveModel=Sauver comme mod\u00E8le -isisfish.common.saveNextSimulation=Sauver pour la prochaine simulation -isisfish.common.season=Saison -isisfish.common.setOfVessels=Ensemble de navires -isisfish.common.simulate=Simuler -isisfish.common.stop=Arr\u00EAter -isisfish.common.strategies=Strat\u00E9gies -isisfish.common.sum=somme -isisfish.common.tag=Tag -isisfish.common.tripType=Type de trajet -isisfish.common.valid=Valider -isisfish.common.value=Valeur -isisfish.common.warn=Warning -isisfish.common.year=ann\u00E9e -isisfish.common.zone=Zone -isisfish.config.database.lockmode.description= -isisfish.config.main.compileDirectory.description=le r\u00E9pertoire o\u00F9 sont compil\u00E9s les scripts -isisfish.config.main.configFileName.description=le fichier de configuration \u00E0 utiliser -isisfish.config.main.defaultBackupDirectory.description=le r\u00E9pertoire o\u00F9 stocker les backups des donn\u00E9es -isisfish.config.main.defaultExportDirectory.description=le r\u00E9pertoire o\u00F9 exporter les r\u00E9sultats des simulations -isisfish.config.main.defaultExportNames.description=les noms des exports \u00E0 effectuer apr\u00E8s une simulation -isisfish.config.main.defaultMapFile.description=TODO -isisfish.config.main.defaultResultNames.description=les noms des r\u00E9sultats \u00E0 traiter apr\u00E8s une simulation -isisfish.config.main.defaultSimulator.description=le nom du simulateur par d\u00E9faut \u00E0 utiliser lors d'une simulation -isisfish.config.main.defaultTagValue.description=TODO -isisfish.config.main.encoding.description=l'encoding du syst\u00E8me -isisfish.config.main.javadocDirectory.description= -isisfish.config.main.javadocURL.description=l'url de la javadoc des scripts -isisfish.config.main.launchUI.description= -isisfish.config.main.localSimulator.description=pour indiquer si les simulations sont \u00E0 effectuer localement -isisfish.config.main.locale.description=la locale utilisateur -isisfish.config.main.login.description=le login pour se connecter au serveur de simulations distant -isisfish.config.main.password.description=le mot de passe pour se connecter au serveur de simulations distant -isisfish.config.main.projectName.description=le nom du projet -isisfish.config.main.regionMap.description=le nom du r\u00E9pertoire contenant les maps d'une r\u00E9gion -isisfish.config.main.remoteCaparmor.description=lance les simulations sur un serveur distant -isisfish.config.main.resultExport.description=TODO -isisfish.config.main.simulation.max.simultaneous.simulation=Nombre de simulations simultan\u00E9es -isisfish.config.main.simulation.max.simultaneous.simulation.description=Nombre maximum de simulations pouvant \u00EAtre envoy\u00E9es au serveur -isisfish.config.main.simulation.ssh.control.check.interval=V\u00E9rification de la progression (secondes) -isisfish.config.main.simulation.ssh.control.check.interval.description=Temps d'attente en secondes entre deux v\u00E9rifications de progression -isisfish.config.main.simulation.ssh.datapath=Base de donn\u00E9es -isisfish.config.main.simulation.ssh.datapath.description=Emplacement de la base de donn\u00E9es (isis-database) -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.pbsbinpath=Emplacement des executables PBS -isisfish.config.main.simulation.ssh.pbsbinpath.description=Emplacement des commandes PBS (qsub, qdel...) sur le serveur -isisfish.config.main.simulation.ssh.server=Adresse du serveur -isisfish.config.main.simulation.ssh.server.description=Adresse du serveur -isisfish.config.main.simulation.ssh.tmppath=Dossier temporaire -isisfish.config.main.simulation.ssh.tmppath.description=Emplacement du dossier temporaire -isisfish.config.main.simulation.ssh.userhome=R\u00E9pertoire d'accueil -isisfish.config.main.simulation.ssh.userhome.description=R\u00E9pertoire d'accueil de l'utilisateur -isisfish.config.main.simulation.ssh.username=Identifiant -isisfish.config.main.simulation.ssh.username.description=Identifiant SSH pour se connecter au serveur -isisfish.config.main.simulationServer.description=l'url du serveur de simulations distant -isisfish.config.main.simulationShowOnlyError.description=pour indiquer si l'on doit conserver dans l'UI des simulations termin\u00E9es uniquement celles avec erreur -isisfish.config.main.simulationShowOnlyQueue.description=pour indiquer si l'on doit conserver dans l'UI des simulations termin\u00E9es uniquement celles effectu\u00E9es localement -isisfish.config.main.smtpServer.description=le nom du serveur smtp \u00E0 utiliser pour envoyer les courriels -isisfish.config.main.subSimulator.description=pour indiquer si les simulations sont \u00E0 effectuer localement dans un sous process -isisfish.config.main.userMail.description=le courriel de l'utilisateur -isisfish.config.main.userName.description=le nom - pr\u00E9nom de l'utilisateur -isisfish.config.ssh.key.file=Cl\u00E9 SSH -isisfish.config.ssh.key.file.description=Emplacement de la cl\u00E9 priv\u00E9e SSH -isisfish.config.vcs.hostName.description=le nom du serveur vcs \u00E0 utiliser -isisfish.config.vcs.keyFile.description=le chemin complet du fichier de clef priv\u00E9e ssh2 \u00E0 utiliser lors d'une connexion s\u00E9curis\u00E9e -isisfish.config.vcs.localDatabasePath.description= -isisfish.config.vcs.noPassPhrase.description=pour indiquer si la clef priv\u00E9e ssh2 utilis\u00E9e pour communiquer avec le serveur vcs est prot\u00E9g\u00E9 par une passe-phrase -isisfish.config.vcs.passphrase.description=la passe-phrase utilis\u00E9e pour prot\u00E9ger la clef priv\u00E9e ssh -isisfish.config.vcs.remoteDatabase.description=le nom du module de donn\u00E9es sur le serveur vcs -isisfish.config.vcs.remotePath.description=le chemin jusqu'au parent du module de donn\u00E9es sur le serveur vcs -isisfish.config.vcs.type.description=le type de communication vcs utilis\u00E9 -isisfish.config.vcs.typeRepo.description=le type de r\u00E9pository vcs utilis\u00E9 -isisfish.config.vcs.useSshConnexion.description=pour indiquer si l'on utilise une connexion s\u00E9curis\u00E9e pour communiquer avec le serveur vcs (ssh2) -isisfish.config.vcs.userName.description=le login de l'utilisateur sur le serveur vcs -isisfish.config.vcs.userPassword.description= -isisfish.dataResult.descriptionLabel=defaultToolTip-fr.ifremer.resultat.DataResult.descriptionLabel -isisfish.dataResult.export.csv=Exporter en CSV -isisfish.dataResult.exportButton=defaultToolTip-fr.ifremer.resultat.DataResult.exportButton -isisfish.dataResult.label=label9 -isisfish.dataResult.matriceTable=defaultToolTip-fr.ifremer.resultat.DataResult.matriceTable -isisfish.dataResult.scrolledwindow2=defaultToolTip-fr.ifremer.resultat.DataResult.scrolledwindow2 -isisfish.dataResult.table2=defaultToolTip-fr.ifremer.resultat.DataResult.table2 -isisfish.date.toString=%1$s %2$s -isisfish.effortDescription.crewFoodCost=Co\u00FBt de l'alimentation pour l'\u00E9quipage -isisfish.effortDescription.crewShareRate=Taux de partage de l'\u00E9quipage -isisfish.effortDescription.crewSize=Taille de l'\u00E9quipage -isisfish.effortDescription.economicTitle=Param\u00E8tres \u00E9conomiques -isisfish.effortDescription.effortTitle=Param\u00E8tres d'effort de p\u00EAche -isisfish.effortDescription.fishingOperation=Op\u00E9ration de p\u00EAche -isisfish.effortDescription.fishingOperationDuration=Dur\u00E9e de la p\u00EAche -isisfish.effortDescription.fishingOperationDuration.tooltip=En heures -isisfish.effortDescription.fixedCrewSalary=Salaire d'\u00E9quipage fixe -isisfish.effortDescription.gearsNumberPerOperation=Nombre d'engins par op\u00E9ration -isisfish.effortDescription.landingCosts=Co\u00FBts d'accastillage -isisfish.effortDescription.otherRunningCost=Autres co\u00FBts -isisfish.effortDescription.parametersTitle=Param\u00E8tres des m\u00E9tiers -isisfish.effortDescription.repairAndMaintenanceGearCost=Co\u00FBts de maintenance -isisfish.effortDescription.title=M\u00E9tiers pratiqu\u00E9s -isisfish.effortDescription.toString=EffortDescription for %1$s with %2$s -isisfish.effortDescription.unitCostOfFishing=Co\u00FBt unitaire de la p\u00EAche -isisfish.equation.editor.title=Editeur d'\u00E9quation -isisfish.error.acceptable.population=La nouvelle valeur n'est pas une valeur valide pour cette population -isisfish.error.add.card=Erreur lors de l'ajout du r\u00E9sultat \u00E0 la carte. -isisfish.error.add.logger.simulation=isisfish.error.add.logger.simulation -isisfish.error.add.result.data=Erreur lors de l'ajout du r\u00E9sultat au data. -isisfish.error.add.result.graph=Erreur lors de l'ajout du r\u00E9sultat au graph. -isisfish.error.add.tray=Impossible d'ajouter une icone de notification -isisfish.error.change.classloader=Can't change classloader because can't create URL from file %1$s -isisfish.error.change.equation=Can't change equation -isisfish.error.check.region= -isisfish.error.compile.fileerror=Le fichier %s contient des erreurs \! -isisfish.error.compile.script=Impossible de compiler le script \: %s -isisfish.error.compiled.parameter=Can't get rule parameter from compiled class -isisfish.error.conversion.data=Erreur lors de la conversion du fichier de donn\u00E9es -isisfish.error.create.equation=Can't create equation -isisfish.error.delete.database=Can't delete database -isisfish.error.delete.file=could not delete file %1$s -isisfish.error.delete.vcs.files=Can't delete vcs files -isisfish.error.during.simulation=Error during simulation -isisfish.error.emigration.negative=emigration negative -isisfish.error.empty.code.rubbin=le code rubbin est vide -isisfish.error.empty.emigration=emigration vide -isisfish.error.empty.id.geographic=l'identifiant g\u00E9ographique est vide -isisfish.error.empty.immigration=immigration vide -isisfish.error.empty.migration=Migration vide -isisfish.error.empty.name=le nom est vide -isisfish.error.empty.params.name=le nom du param\u00E8tre est vide -isisfish.error.empty.population=Population est vide -isisfish.error.empty.scientific.name=le nom scientifique est vide -isisfish.error.empty.season=info saison vide -isisfish.error.empty.selectivity=s\u00E9lectivit\u00E9 est vide -isisfish.error.empty.species=espece capturable vide -isisfish.error.empty.species.name=le nom d'espece est vide -isisfish.error.empty.unit=l'unit\u00E9 de mesure est vide -isisfish.error.equation.return.number=EquationImpl must retun a number\: %1$s -isisfish.error.evaluate.equation=Can't evaluate equation\: %1$s -isisfish.error.evaluate.preplan.script= -isisfish.error.evalute.plan.script=Can't evaluate plan script -isisfish.error.factor.invalid=Le facteur n'est pas valide -isisfish.error.file.already.exists=The file %1$s already exist -isisfish.error.get.fisheryRegion=Can't get FisheryRegion -isisfish.error.growth.equation.before.create.group.population=Error, You must input growth equation before create the group population -isisfish.error.immigration.negative=immigration negative -isisfish.error.import.convertible=Erreur lors de l'import, la version du fichier que vous souhaitez importer n'est pas transformable en une version importable. -isisfish.error.import.file=Can't import file %1$s -isisfish.error.import.recent.files=Erreur lors de l'import, la version du fichier que vous souhaitez importer est plus r\u00E9cente que la version souhait\u00E9e. -isisfish.error.init.map=Can't init map. -isisfish.error.init.remove.button=could not init remove button (button or list is null) button \: %1$s, list \: %2$s -isisfish.error.instanciate=Can't instanciate %1$s -isisfish.error.instanciate.export=Can't instanciate export %1$s -isisfish.error.invalid.costs.fix=les co\u00FBts fixes sont invalides -isisfish.error.invalid.distribution.recruitment=distribution de recrutement invalide -isisfish.error.invalid.equation=Equation invalide -isisfish.error.invalid.equation.name=Nom d'\u00E9quation invalide -isisfish.error.invalid.file.name=Le nom du script %1$s n'est pas valide. -isisfish.error.invalid.interval.reproduction.recruitment=interval entre la reproduction et le recrutement invalide -isisfish.error.invalid.mean.weight=poids moyen invalide -isisfish.error.invalid.natural.death=mortalit\u00E9 naturelle sur les classes naissantes invalide -isisfish.error.invalid.number=le nombre est invalide -isisfish.error.invalid.range=La gamme possible n'a pas de valeur acceptable -isisfish.error.invalid.values.params=Param\u00E8tre controlable hors valeurs possibles -isisfish.error.invalidate.natural.death=mortalite naturelle invalide -isisfish.error.invoke.method=Can't invoke method '%1$s' for class %2$s -isisfish.error.linkageerror.message=Isis-Fish a d\u00E9tect\u00E9 une erreur d'utilisation des scripts.\nLe dossier de compilation a \u00E9t\u00E9 supprim\u00E9 pour forcer leur recompilation.\n\nMerci de relancer Isis-Fish. -isisfish.error.linkageerror.title=Erreur d'initialisation -isisfish.error.load.class=Can't load class\: %1$s -isisfish.error.load.classloader=Can't create ClassLoader for script, bad directory\: %1$s for reason %2$s -isisfish.error.load.file=could not load file %1$s -isisfish.error.load.map=Can't load map file\: %1$s -isisfish.error.log.closeAppender=n'a pas pu ferme l'appender %1$s et la categorie %2$s -isisfish.error.log.console.dispose=Une erreur est survenue pendant la fermeture de la console %1$s de log, raison %2$s -isisfish.error.log.createAppender=n'a pas pu creer l'appender [%1$s] \: %2$s pour la raison %3$s -isisfish.error.log.foundAppender=n'a pas trouve l'appender %1$s pour la categorie %2$s -isisfish.error.matrix.more.2d=Matrice de plus de 2 dimensions\!\!\nS\u00E9lectionnez moins d'\u00E9l\u00E9ments ou utilisez l'op\u00E9rateur somme. -isisfish.error.migration.negative=Migration negative -isisfish.error.no.matrix=No matrix for\: -isisfish.error.no.null.time.step=Error, the time step should not be null -isisfish.error.no.sector=il n'y a pas de secteur de d\u00E9finit -isisfish.error.no.select.simulation=could not select simulation -isisfish.error.no.target.species=no target species in %1$s for %2$s -isisfish.error.not.found.code=could not found codeclass for %1$s -isisfish.error.not.found.description=could not found description for %1$s -isisfish.error.not.found.field=could not found field %1$s doc for %2$s -isisfish.error.not.found.field.class=could not found field %1$s for class %2$s -isisfish.error.not.null.class.grown=classe mature vaut nul -isisfish.error.not.null.mean.weight=poids moyen nul -isisfish.error.not.null.natiral.death=mortalite naturelle nulle -isisfish.error.not.possible.metier=Pas de m\u00E9tier possible -isisfish.error.not.support.class=La classe %s ne supporte pas les descritions -isisfish.error.number.classes.upper.zero=Error, the number of classes must be upper than 0 -isisfish.error.obtain.analyseplan=Can't obtain description of AnalysePlan -isisfish.error.obtain.doc.export=Can't obtain @Doc on class Export -isisfish.error.obtain.doc.resultName=Can't obtain @Doc on ResultName -isisfish.error.obtain.doc.rule=Can't obtain description for a Rule class -isisfish.error.obtain.field=Can't obtain field @Doc for Rule %1$s -isisfish.error.obtain.field.analyseplan=Can't obtain field @Doc for AnalysePlan %1$s -isisfish.error.obtain.field.export=Can't obtain field @Doc for Export %1$s -isisfish.error.obtain.field.sensitivitycalculator=Can't obtain field @Doc for Calculator %1$s -isisfish.error.out.memory=Out of memory try with more memory (option -mx) -isisfish.error.overlap.season=Cette saison chevauche une autre saison -isisfish.error.parse.date=Can't parse date %1$s -isisfish.error.parse.long=Can't parse long %1$s -isisfish.error.plan.parameter=Can't get plan parameter from compiled class -isisfish.error.prepare.data=Can't prepare data -isisfish.error.prepare.information.simulation=Can't prepare information for simulation -isisfish.error.read.simulation=Can't read simulation information %1$s -isisfish.error.read.simulation.parameters=Impossible de lire les param\u00EAtres du fichier \: %1$s -isisfish.error.region.already.exists=Cette r\u00E9gion existe d\u00E9j\u00E0 -isisfish.error.region.name.empty=Le nom de la R\u00E9gion est vide -isisfish.error.remove.directory=Can't remove directory %1$s -isisfish.error.rename.region=Can't rename region to %1$s -isisfish.error.save.checkSum.compilation=Can't save checkSum to compilation\: %1$s -isisfish.error.save.region= -isisfish.error.save.script.compilation=Can't save script to compilation\: %1$s -isisfish.error.save.simulation.parameters=Can't save simulation parameters in file %1$s -isisfish.error.script.create=isisfish.error.script.create -isisfish.error.script.delete=N'a pas pu supprimer le fichier %1$s pour la raison suivante %2$s -isisfish.error.script.import=N'a pas pu importer pour la raison suivante %1$s -isisfish.error.script.load=N'a pas pu charger le fichier %1$s pour la raison suivante %2$s -isisfish.error.script.save=N'a pas pu sauver le fichier %1$s pour la raison suivante %2$s -isisfish.error.sensitivity.parameter= -isisfish.error.simulation.log.openAppender=n'a pas pu ouvrir l'appender de la simulation %1$s pour la raison %2$s -isisfish.error.simulation.remote.global=Impossible de lancer une simulation sur serveur distant -isisfish.error.simulation.remote.wrongportvalue=Le port de connexion a une valeur incorrecte \: %s -isisfish.error.simulation.resultXml.close=Can't close simulation result XML for reason %1$s -isisfish.error.simulation.resultXml.open=Can't open simulation result XML for reason %1$s -isisfish.error.simulation.resultXml.write=Can't write simulation result XML for reason %1$s -isisfish.error.source.parameter=Can't get parameter from source -isisfish.error.strategy.order=Strategy %1$s don't have 12 StrategyMonthInfo but %2$s. Recreate them -isisfish.error.undefined.classes=pas de classes d\u00E9finies -isisfish.error.undefined.correspondence.zones.reproduction.recruitment=pas de correspondance entre les zones de reproduction et les zones de recrutement -isisfish.error.undefined.gear=l'engin n'est pas d\u00E9fini -isisfish.error.undefined.mesh=aucune maille de d\u00E9fini -isisfish.error.undefined.mesh.sector=aucune maille dans le secteur -isisfish.error.undefined.meta.population=aucune meta population de d\u00E9fini -isisfish.error.undefined.natural.death=pas de mortalit\u00E9 naturelle sur les classes naissantes -isisfish.error.undefined.sector=aucun secteur de d\u00E9fini -isisfish.error.undefined.stategy=aucune strat\u00E9gie de d\u00E9fini -isisfish.error.undefined.stategy.months=La strat\u00E9gie n'est pas d\u00E9finie pour certain mois -isisfish.error.undefined.zone.population=il n'y a pas de zone de population de d\u00E9finie -isisfish.error.undefined.zone.recruitment=il n'y a pas de zone de recrutement de d\u00E9finie -isisfish.error.undefined.zone.reproduction=il n'y a pas de zone de reproduction de d\u00E9finie -isisfish.error.unsupported.equation.langage=unsupported langage '%1$s' for equation\: %2$s -isisfish.error.wait.simThread=Can't wait SimThread -isisfish.error.warning.title=Attention -isisfish.error.write.simulation=Can't write information %1$s -isisfish.export.directory=Dossier d'export -isisfish.export.saved=Exports des r\u00E9sultats sauvegard\u00E9s -isisfish.export.title=Export des r\u00E9sultats -isisfish.factor.coefficient=Coefficient (en %) -isisfish.factor.comment=Commentaires -isisfish.factor.continue=Facteur continu -isisfish.factor.discret=Facteur discret -isisfish.factor.equation.variable.action=Action -isisfish.factor.equation.variable.coefficient=Coef (en %) -isisfish.factor.equation.variable.name=Nom -isisfish.factor.equation.variable.operator=Op\u00E9rateur -isisfish.factor.equation.variable.value=Valeur -isisfish.factor.factor=Facteur -isisfish.factor.factors=Facteurs -isisfish.factor.firstValue=Premi\u00E8re valeur -isisfish.factor.increment=Cardinalit\u00E9 -isisfish.factor.lastValue=Derni\u00E8re valeur -isisfish.factor.name=Nom du facteur -isisfish.factor.operateur=Op\u00E9rateur -isisfish.factor.selectDiscretNumber=Nombre de facteurs -isisfish.factor.title=Saisie d'un facteur -isisfish.factor.validDiscretNumber=Valider -isisfish.factor.value=Valeur -isisfish.filter=Filtrer -isisfish.filter.apply=Appliquer le filtre -isisfish.filter.cancel=Annuler -isisfish.filter.log.levelDebug=debug -isisfish.filter.log.levelError=erreur -isisfish.filter.log.levelFatal=fatal -isisfish.filter.log.levelInfo=info -isisfish.filter.log.levelTrace=trace -isisfish.filter.log.levelWarn=warning -isisfish.filter.log.tooltip.levelDebug=s\u00E9lectionner pour filtrer ce niveau -isisfish.filter.log.tooltip.levelError=s\u00E9lectionner pour filtrer ce niveau -isisfish.filter.log.tooltip.levelFatal=s\u00E9lectionner pour filtrer ce niveau -isisfish.filter.log.tooltip.levelInfo=s\u00E9lectionner pour filtrer ce niveau -isisfish.filter.log.tooltip.levelTrace=s\u00E9lectionner pour filtrer ce niveau -isisfish.filter.log.tooltip.levelWarn=s\u00E9lectionner pour filtrer ce niveau -isisfish.filter.log.tooltip.message=Entrer un terme \u00E0 rechercher et appuyer sur Entr\u00E9e -isisfish.filter.reset=R\u00E9initialiser -isisfish.filter.result=R\u00E9sultats -isisfish.filter.result.found=R\u00E9sultats (%d/%d) -isisfish.filter.select=S\u00E9lectionner -isisfish.filter.select.simulation=S\u00E9lectionner une simulation -isisfish.filter.simulation=Filtrer les simulations -isisfish.filter.simulation.analysePlanNumber=num\u00E9ro d'analyse -isisfish.filter.simulation.description=description -isisfish.filter.simulation.local=locale -isisfish.filter.simulation.numberOfYear=nombre d'ann\u00E9e(s) -isisfish.filter.simulation.regionName=nom de r\u00E9gion -isisfish.filter.simulation.simulationEnd=date de fin (dd/MM/yyyy) -isisfish.filter.simulation.simulationName=nom de simulation -isisfish.filter.simulation.simulationStart=date de d\u00E9but (dd/MM/yyyy) -isisfish.filter.simulation.simulatorName=nom du simulateur -isisfish.filter.simulation.tooltip.analysePlanNumber=filter sur le num\u00E9ro d'analyse (uniquement pour les simulations avec plan d'analyse) -isisfish.filter.simulation.tooltip.description=filtrer sur la description (format regex) -isisfish.filter.simulation.tooltip.local=filter uniquement les simulations locales -isisfish.filter.simulation.tooltip.numberOfYear=filter sur le nombre d'ann\u00E9e(s) (recherche extacte) -isisfish.filter.simulation.tooltip.regionName=filtrer sur le nom de la r\u00E9gion (format regex) -isisfish.filter.simulation.tooltip.simulationEnd=filtrer sur la date de fin de simulation (format dd/MM/yyyy) -isisfish.filter.simulation.tooltip.simulationName=filtrer sur le nom de simulation (format regex) -isisfish.filter.simulation.tooltip.simulationStart=filtrer sur la date de d\u00E9but de simulation (format dd/MM/yyyy) -isisfish.filter.simulation.tooltip.simulatorName=filter sur le nom du simulateur utilis\u00E9 (format regex) -isisfish.filter.simulation.tooltip.useAnalysePlan=filter uniquement les simulations avec plan d'analyse -isisfish.filter.simulation.tooltip.useOptimization=filter uniquement les simulations avec optimisation -isisfish.filter.simulation.tooltip.usePreScript=filter uniquement les simulations avec Prescript -isisfish.filter.simulation.tooltip.useStatistic=filter uniquement les simulations avec statistiques -isisfish.filter.simulation.useAnalysePlan=plan d'analyse -isisfish.filter.simulation.useOptimization=optimisation -isisfish.filter.simulation.usePreScript=prescript -isisfish.filter.simulation.useStatistic=statistiques -isisfish.fisheryRegion.addMap=Ajouter une carte -isisfish.fisheryRegion.area=Extr\u00E9mit\u00E9s de la zone de p\u00EAche -isisfish.fisheryRegion.comments=Commentaires -isisfish.fisheryRegion.delMap=Supprimer la carte -isisfish.fisheryRegion.latitude=Lat. -isisfish.fisheryRegion.latitude.max=Lat. max. -isisfish.fisheryRegion.latitude.min=Lat. min. -isisfish.fisheryRegion.longitude=Long. -isisfish.fisheryRegion.longitude.max=Long. max. -isisfish.fisheryRegion.longitude.min=Long. min. -isisfish.fisheryRegion.name=Nom de la r\u00E9gion -isisfish.fisheryRegion.ofCells=de mailles (option) -isisfish.fisheryRegion.selectFile=S\u00E9lectionnez un fichier -isisfish.fisheryRegion.spatial=R\u00E9solution spatiale -isisfish.gear.comments=Commentaires -isisfish.gear.effortUnit=Unit\u00E9 d'effort -isisfish.gear.name=Nom -isisfish.gear.rangeValues=Gamme de valeurs -isisfish.gear.standardisationFactor=Facteur de standardisation -isisfish.gear.technicalParameter=Param\u00E8tre technique -isisfish.gear.title=Engin -isisfish.graphBean.graph.render=Choisir un rendu de graphe -isisfish.graphBean.graphPanel=defaultToolTip-fr.ifremer.graph.GraphBean.graphPanel -isisfish.graphBean.graphRendererCombo=defaultToolTip-fr.ifremer.graph.GraphBean.graphRendererCombo -isisfish.graphBean.graphSplitPane=defaultToolTip-fr.ifremer.graph.GraphBean.graphSplitPane -isisfish.graphBean.label=defaultToolTip-fr.ifremer.graph.GraphBean.label1 -isisfish.graphBean.palettePanel=defaultToolTip-fr.ifremer.graph.GraphBean.palettePanel -isisfish.graphBean.scrolledwindow=defaultToolTip-fr.ifremer.graph.GraphBean.scrolledwindow1 -isisfish.graphBean.table=defaultToolTip-fr.ifremer.graph.GraphBean.table2 -isisfish.graphBean.table3=defaultToolTip-fr.ifremer.graph.GraphBean.table3 -isisfish.graphCombo.render.bar.horizontal=Rendu en barre horizontale -isisfish.graphCombo.render.bar.horizontal.stacked=Rendu en barre horizontale empil\u00E9e -isisfish.graphCombo.render.bar.vertical=Rendu en barre verticale -isisfish.graphCombo.render.bar.vertical.3d=Rendu en barre verticale 3D -isisfish.graphCombo.render.bar.vertical.stacked=Rendu en barre verticale empil\u00E9e -isisfish.graphCombo.render.line=Rendu en ligne -isisfish.graphCombo.render.min.max=Rendu en MinMax -isisfish.graphCombo.render.surface=Rendu en Aire -isisfish.infoItem..table=defaultToolTip-fr.ifremer.resultat.InfoItem.table29 -isisfish.infoItem.label=defaultToolTip-fr.ifremer.resultat.InfoItem.label -isisfish.infoItem.list=defaultToolTip-fr.ifremer.resultat.InfoItem.list -isisfish.infoItem.scrolledwindow=defaultToolTip-fr.ifremer.resultat.InfoItem.scrolledwindow1 -isisfish.infoItem.sum=defaultToolTip-fr.ifremer.resultat.InfoItemDate.sumButton -isisfish.infoItem.sum.year=Somme de \u00E9l\u00E9ment par ann\u00E9e -isisfish.infoItem.table=defaultToolTip-fr.ifremer.resultat.InfoItem.table30 -isisfish.input.continueCells=Continuer vers les mailles -isisfish.input.continueGears=Continuer vers les engins -isisfish.input.continueMetiers=Continuer vers les metiers -isisfish.input.continuePopulations=Continuer vers les populations -isisfish.input.continuePorts=Continuer vers les ports -isisfish.input.continueSetOfVessels=Continuer vers les ensembles de navires -isisfish.input.continueSpecies=Continuer vers les esp\u00E8ces -isisfish.input.continueStrategies=Continuer vers les strat\u00E9gies -isisfish.input.continueTripTypes=Continuer vers les types de trajets -isisfish.input.continueVesselTypes=Continuer vers les types de navires -isisfish.input.continueZones=Continuer vers les zones -isisfish.input.menu.addRegion=Ajouter une r\u00E9gion -isisfish.input.menu.commit=Sauvegarder les changements -isisfish.input.menu.copyRegion=Copier r\u00E9gion -isisfish.input.menu.exportRegion=Exporter la r\u00E9gion -isisfish.input.menu.importRegion=Importer une r\u00E9gion -isisfish.input.menu.importRegionSimulation=Importer la r\u00E9gion d'une simulation -isisfish.input.menu.importRegionV2=Importer une r\u00E9gion de la v2 d'IsisFish -isisfish.input.menu.importRenameRegion=Importer une r\u00E9gion et la renommer -isisfish.input.menu.removeLocaly=Supprimer localement -isisfish.input.menu.removeLocalyRemotely=Supprimer localement et \u00E0 distance -isisfish.input.menu.server=Serveur -isisfish.input.newRegion=Nouvelle r\u00E9gion -isisfish.input.selectRegion=S\u00E9lectionnez une r\u00E9gion -isisfish.input.title=Saisie de la p\u00EAcherie -isisfish.input.tree.cells=Mailles -isisfish.input.tree.gears=Engins -isisfish.input.tree.metiers=M\u00E9tiers -isisfish.input.tree.populations=Populations -isisfish.input.tree.ports=Ports -isisfish.input.tree.setofvessels=Flottilles -isisfish.input.tree.species=Esp\u00E8ces -isisfish.input.tree.strategies=Strat\u00E9gies -isisfish.input.tree.triptypes=Types de mar\u00E9e -isisfish.input.tree.vesseltypes=Types de navire -isisfish.input.tree.zones=Zones -isisfish.launch.anonymous=lecture seule -isisfish.launch.email=courriel -isisfish.launch.firstname=nom -isisfish.launch.init.done=init done in %1$s. -isisfish.launch.lasstname=pr\u00E9nom -isisfish.launch.server.authenticationMethod=droit d'acc\u00E8s au serveur -isisfish.launch.server.login=nom utilisateur -isisfish.launch.server.ssh.confirm.passphrase=confirmer la passphrase -isisfish.launch.server.ssh.key.change=Changer la clef ssh -isisfish.launch.server.ssh.key.generate=G\u00E9n\u00E9rer la clef ssh -isisfish.launch.server.ssh.no.passphrase=pas de passphrase -isisfish.launch.server.ssh.passphrase=passphrase -isisfish.launch.server.ssh.privateKeyFile=clef priv\u00E9e ssh -isisfish.launch.server.ssh.publicKeyFile=clef publique ssh -isisfish.launch.ssh=lecture-\u00E9criture (ssh) -isisfish.launch.stop=Arr\u00EAt de la simulation... -isisfish.launching=after init done in %1$s. -isisfish.log.addAppender=ajoute un appender [%1$s] -isisfish.log.body=Message \u00E0 joindre -isisfish.log.closeAppender=ferme l'appender [%1$s] pour la categorie %2$s -isisfish.log.mail.failed=Impossible d'envoyer le rapport par courriel. Le serveur smtp fonctionne ? (J'essaye de contacter < %1$s > smtp server) -isisfish.log.mail.send=Un rapport a \u00E9t\u00E9 envoy\u00E9 \u00E0 %1$s -isisfish.log.mail.send.title=Envoi de la simulation %1$s par email -isisfish.log.mailTo=Adresse du destinataire -isisfish.log.removeAppender=supprime l'appender [%1$s] -isisfish.log.restoreLogLevel=repositionne le niveau du logger %1$s du niveau %2$s au niveau %3$s -isisfish.log.sendAll=Envoyer la simulation complete -isisfish.log.sendMail=Envoyer par email -isisfish.log.simulation.name=IsisFish simulation %1$s -isisfish.log.swapLogLevel=permute le niveau du logger %1$s du niveau %2$s au niveau %3$s -isisfish.log.tooltip.body=Le message saisi sera joint au courriel envoy\u00E9 -isisfish.log.tooltip.mailTo=Entrer l'adresse du destinataire du courriel -isisfish.log.tooltip.sendAll=Envoyer toute la simulation, ou uniquement le fichier de log -isisfish.log.tooltip.sendMail=Cliquer pour envoyer le courriel contentant les fichiers -isisfish.message.add.objets.simulation=Ajout des nouveaux objets cr\u00E9\u00E9s durant la simulation -isisfish.message.backup.database.finished=backup database termin\u00E9 -isisfish.message.backup.database.progress=backup database en cours -isisfish.message.cancel.finished=Annulation termin\u00E9e -isisfish.message.check.finished=v\u00E9rification termin\u00E9e -isisfish.message.check.region= -isisfish.message.checking.cell= -isisfish.message.choose.archive=choose archive file or directory -isisfish.message.commit.cancelled=commit annul\u00E9 -isisfish.message.commit.finished=commit termin\u00E9 -isisfish.message.commit.region.canceled=Commit de la r\u00E9gion annul\u00E9 -isisfish.message.commiting.region=En train de commiter la r\u00E9gion %1$s ... -isisfish.message.compilation.time=Temps de compilation %1$ss -isisfish.message.confirm.delete.object=Voulez-vous vraiment supprimer l'objet %1$s -isisfish.message.confirm.remove.region=Voulez-vous vraiment supprimer la r\u00E9gion %1$s ? -isisfish.message.confirm.remove.script=Voulez-vous vraiment supprimer le script '%1$s' ? -isisfish.message.copy.finished=Copie termin\u00E9e -isisfish.message.copy.region=Copier la r\u00E9gion vers %1$s -isisfish.message.creating.region=En train de cr\u00E9er la r\u00E9gion %1$s -isisfish.message.creation.done=cr\u00E9ation termin\u00E9e %1$s -isisfish.message.creation.finished=Cr\u00E9ation termin\u00E9e -isisfish.message.delete.canceled=supression annul\u00E9e -isisfish.message.delete.entities=Supprimer les entit\u00E9s -isisfish.message.delete.entity=Supprimer l'entit\u00E9 -isisfish.message.delete.finished=Suppression termin\u00E9e -isisfish.message.delete.object=Pour supprimer l'objet %1$s, tous les objets suivants seront aussi supprim\u00E9s \n\n -isisfish.message.evaluation.finished=\u00E9valuation termin\u00E9e -isisfish.message.export.done=Export termin\u00E9 -isisfish.message.export.zip=Exporter dans le fichier zip %1$s -isisfish.message.file.overwrite=Le fichier existe, Voulez-vous l'\u00E9craser ? -isisfish.message.import=Importer %1$s -isisfish.message.import.equation.convert=Conversion manuelle de l'\u00E9quation -isisfish.message.import.finished=Import termin\u00E9 -isisfish.message.import.region.name=Entre le nom de la r\u00E9egion \u00E0 importer -isisfish.message.import.region.xml=R\u00E9gion XML (Isis-Fish V2.x) -isisfish.message.import.region.zipped=Zipped Region -isisfish.message.import.scripts.file.cancelled=Importation des scripts annul\u00E9 -isisfish.message.import.xml.v2.file=Import xml v2 file -isisfish.message.import.zip=Import zip file -isisfish.message.launchui.notlaunch= -isisfish.message.load.finished=Chargement termin\u00E9 -isisfish.message.load.map=Chargement de la carte \: %1$s (%2$s, %3$s) -isisfish.message.loading.old.simulation=Chargement d'une ancienne simulation ... -isisfish.message.loading.region=Chargement de la r\u00E9gion -isisfish.message.name.imported.region=Entrez le nom de la r\u00E9gion \u00E0 importer -isisfish.message.new.filename=Entrez le nom du nouveau du fichier.\n\t (utiliser uniquemment des caract\u00E8res et _ en commencant avec une majuscule) -isisfish.message.new.formule.category=Choisissez le cat\u00E9gorie de la formule -isisfish.message.new.formule.title=Nouvelle formule -isisfish.message.new.region.name=Entrer le nom de la nouvell r\u00E9gion -isisfish.message.old.simulation.loaded=Ancienne simulation charg\u00E9e -isisfish.message.page.modified=Cette page a \u00E9t\u00E9 modifi\u00E9, voulez-vous la sauvegarder ? -isisfish.message.presimulation.script.execution=Ex\u00E9cution des scripts de Presimulation -isisfish.message.recruitment.number.month=Entrez le nombre de mois de recrutement -isisfish.message.region.commited=R\u00E9gion commit\u00E9e -isisfish.message.region.loaded=R\u00E9gion charg\u00E9e -isisfish.message.region.remove.canceled=Suppression de r\u00E9gion annul\u00E9 -isisfish.message.region.removed=R\u00E9gion supprim\u00E9e -isisfish.message.remove.canceled=Suppression annul\u00E9e -isisfish.message.remove.finished=Suppresison termin\u00E9 -isisfish.message.removing.region=Suppression de la r\u00E9gion %1$s ... -isisfish.message.result.verif.region=R\u00E9sultat de la v\u00E9rification de la r\u00E9gion -isisfish.message.save.finished=Sauvegarde termin\u00E9e -isisfish.message.saveModel.finished=Sauvegarde du mod\u00E8le termin\u00E9e -isisfish.message.script.commit=Indiquez vos modifications -isisfish.message.setting.cache.aspects=Mise en place des aspects Cache -isisfish.message.setting.trace.aspects=Mise en place des aspects Trace -isisfish.message.simulation.after=Export des r\u00E9sultats -isisfish.message.simulation.ended=Simulation termin\u00E9e -isisfish.message.simulation.execution=Simulation execution -isisfish.message.simulation.prepare=Pr\u00E9paration de la simulation -isisfish.message.tray.disabled=Icone de notification d\u00E9sactiv\u00E9e -isisfish.message.update.finished=Mise \u00E0 jour termin\u00E9e -isisfish.metier.comments=Commentaires -isisfish.metier.name=Nom -isisfish.metier.rangeValues=Param\u00E8tre d'engin -isisfish.metier.title=M\u00E9tier -isisfish.metierMonitor.metiers=M\u00E9tiers -isisfish.metierMonitor.strategies=Strat\u00E9gies -isisfish.metierSeasonInfo.toString=%1$s saison %2$s-%3$s -isisfish.metierSeasonInfoSpecies.mainSpecies=Esp\u00E8ces principales pour le m\u00E9tier -isisfish.metierSeasonInfoSpecies.selectSeason=S\u00E9lectionnez une saison -isisfish.metierSeasonInfoSpecies.selectSpecies=Choix de l'esp\u00E8ce -isisfish.metierSeasonInfoSpecies.species=Esp\u00E8ce -isisfish.metierSeasonInfoSpecies.targetFactor=Facteur cible -isisfish.metierSeasonInfoSpecies.title=Esp\u00E8ces capturables -isisfish.metierSeasonInfoZone.comments=Commentaires -isisfish.metierSeasonInfoZone.season=Saison -isisfish.metierSeasonInfoZone.selectSeason=S\u00E9lectionnez une saison -isisfish.metierSeasonInfoZone.title=Saison / Zones -isisfish.monitor.title=Moniteur de l'application -isisfish.month.april=avril -isisfish.month.august=ao\u00FBt -isisfish.month.december=d\u00E9cembre -isisfish.month.february=f\u00E9vrier -isisfish.month.january=janvier -isisfish.month.july=juillet -isisfish.month.june=juin -isisfish.month.march=mars -isisfish.month.may=mai -isisfish.month.november=novembre -isisfish.month.october=octobre -isisfish.month.september=septembre -isisfish.params.changeLogLev=Passe du niveau '%1$s' au niveau '%2$s' -isisfish.params.clearFilter=Remise \u00E0 z\u00E9ro du filtre -isisfish.params.description=Description -isisfish.params.filter=Filtrer -isisfish.params.lblLauncher=Lanceur de simulation -isisfish.params.loadOldSimulation=Charger une ancienne simulation -isisfish.params.numberYear=Nombre d'ann\u00E9es -isisfish.params.onlyExportSimulation=Exporter uniquement des simulations -isisfish.params.populationNumbers=Donn\u00E9es de population -isisfish.params.ruleParameters=Param\u00E8tres des r\u00E8gles -isisfish.params.sensitivityName=Nom de l'analyse de sensibilit\u00E9 -isisfish.params.simulationName=Nom de la simulation -isisfish.params.title=Param\u00E8tres -isisfish.params.toString.fishery=P\u00EAcherie\: %1$s\n\n -isisfish.params.toString.lib.logger.level=niveau du logger de librairies %1$s -isisfish.params.toString.number.years=Nombre d'ann\u00E9\u00E9s \: %1$s\n\n -isisfish.params.toString.plan=Plan\: %1$s -isisfish.params.toString.plan.number=Analyse plan sequence number\: %1$s\n\n -isisfish.params.toString.populations=Populations\: -isisfish.params.toString.rule=Rule\: %1$s -isisfish.params.toString.script.logger.level=niveau du logger de scripts %1$s -isisfish.params.toString.script.presimulation=Script de presimulation -isisfish.params.toString.simul.logger.level=niveau du logger de simulateur %1$s -isisfish.params.toString.simulation.done=Simulation r\u00E9alis\u00E9e avec %1$s\: -isisfish.params.toString.strategies=Strat\u00E9gies d'exploitation\: -isisfish.params.useAnalysePlan=Utiliser le plan de simulation -isisfish.params.usePreSimulationScript=Utiliser un script de pr\u00E9-simulation -isisfish.population.capturability=Capturabilit\u0E009e -isisfish.population.comments=Commentaires -isisfish.population.group=Groupe -isisfish.population.groups=Groupes -isisfish.population.mappingZoneReproZoneRecru=MappingZoneReproZoneRecru -isisfish.population.matrixAbundance=Matrice d'abondance -isisfish.population.matrixAbundance1D=matrixAbundance1D -isisfish.population.recruitment=Recrutement -isisfish.population.reproduction=Reproduction -isisfish.population.season=Saison -isisfish.population.zones=Zones -isisfish.populationBasics.geographicID=Identifiant g\u00E9ographique -isisfish.populationBasics.growth=Croissance -isisfish.populationBasics.growthReverse=Croissance inverse -isisfish.populationBasics.maturityGroup=Groupe de maturit\u00E9 -isisfish.populationBasics.name=Nom -isisfish.populationBasics.numberGroup=Nombre de groupes -isisfish.populationBasics.plusGroup=Groupe plus -isisfish.populationBasics.recreateClasses=Reconstruire les groupes -isisfish.populationBasics.title=Saisie des populations -isisfish.populationCapturability.comments=Commentaires -isisfish.populationCapturability.selectCoefficient=S\u00E9lectionnez un coefficient par saison et par classe -isisfish.populationCapturability.title=Saisie de la capturabilit\u00E9 -isisfish.populationEquation.meanWeight=Poids moyen -isisfish.populationEquation.naturalDeathRate=Taux de mortalit\u00E9 naturelle -isisfish.populationEquation.price=Prix -isisfish.populationEquation.title=Saisie des \u00E9quations -isisfish.populationGroup.age=Age -isisfish.populationGroup.comments=Commentaires -isisfish.populationGroup.length=Longueur -isisfish.populationGroup.maximumLength=Longueur maximale -isisfish.populationGroup.meanWeigth=Poids principal -isisfish.populationGroup.minimumLength=Longueur minimale -isisfish.populationGroup.naturalDeathRate=Taux de mortalit\u00E9 naturelle -isisfish.populationGroup.price=Prix -isisfish.populationGroup.reproductionRate=Taux de reproduction -isisfish.populationGroup.title=Saisie des groupes de population -isisfish.populationGroup.toString=%1$s Groupe %2$s -isisfish.populationMigration.comments=Commentaires -isisfish.populationMigration.selectSeason=S\u00E9lectionnez une saison -isisfish.populationMigration.title=Migration -isisfish.populationMigration.useEquation=Utiliser l'\u00E9quation -isisfish.populationMigrationEmigration.coefficient=Coefficient -isisfish.populationMigrationEmigration.departureZone=Zone de d\u00E9part -isisfish.populationMigrationEmigration.title=Migration -isisfish.populationMigrationImmigration.arrivalZone=Zone d'arriv\u00E9e -isisfish.populationMigrationImmigration.coefficient=Coefficient -isisfish.populationMigrationImmigration.title=Immigration -isisfish.populationMigrationMigration.arrivalZone=Zone d'arriv\u00E9e -isisfish.populationMigrationMigration.coefficient=Coefficient -isisfish.populationMigrationMigration.departureZone=Zone de d\u00E9part -isisfish.populationMigrationMigration.title=Migration de population -isisfish.populationRecruitment.comments=Commentaires -isisfish.populationRecruitment.monthgapgetweenreprorecruitment=Nombre de mois entre ponte et recrutement -isisfish.populationRecruitment.recruitmentDistribution=Distribution du recrutement -isisfish.populationRecruitment.reproductionEquation=Equation de reproduction -isisfish.populationRecruitment.title=Saisie des reproductions -isisfish.populationSeasonInfo.arrival=Arriv\u00E9e -isisfish.populationSeasonInfo.departure=D\u00E9part -isisfish.populationSeasonInfo.distributionSpawing=Distribution de la reproduction -isisfish.populationSeasonInfo.emigration=Emigration -isisfish.populationSeasonInfo.group=Groupe -isisfish.populationSeasonInfo.immigration=Immigration -isisfish.populationSeasonInfo.migration=Migration -isisfish.populationSeasonInfo.months=Mois -isisfish.populationSeasonInfo.toString=%1$s saison %2$s-%3$s -isisfish.populationSeasons.Reproduction=Reproduction -isisfish.populationSeasons.changeGroup=Changement de groupe -isisfish.populationSeasons.comments=Commentaires -isisfish.populationSeasons.computeCoefficient=Calculer le coefficient -isisfish.populationSeasons.distributionSpawning=Distribution de la reproduction -isisfish.populationSeasons.noSpacialized=Non spatialis\u00E9 -isisfish.populationSeasons.selectSeason=S\u00E9lectionnez une saison -isisfish.populationSeasons.showSpacialized=Voir les coefficients spatialis\u00E9s -isisfish.populationSeasons.spacialized=spatialis\u00E9 -isisfish.populationSeasons.spacialized.visualisation=Coefficients spatialis\u00E9s -isisfish.populationSeasons.title=Saisons -isisfish.populationZones.betweenSpawningRecruitmentAreas=Correspondance entre les zones de reproduction et de recrutement -isisfish.populationZones.selectPopulationAreas=S\u00E9lectionnez les zones des populations -isisfish.populationZones.selectRecruitmentAreas=S\u00E9lectionnez les zones de recrutement -isisfish.populationZones.selectSpawningAreas=S\u00E9lectionnez les zones de reproduction -isisfish.populationZones.title=Zones -isisfish.port.cell=Maille du port -isisfish.port.comments=Commentaires -isisfish.port.name=Nom -isisfish.preScript.backParameter=Retour aux param\u00E8tres -isisfish.preScript.title=Script de pr\u00E9-simulation -isisfish.queue.clearDone=Retirer les simulations termin\u00E9es -isisfish.queue.id=Identifiant -isisfish.queue.launcher=Lanceur de simulation -isisfish.queue.masterplan=Plan de simulation -isisfish.queue.notstarted=Non d\u00E9marr\u00E9 -isisfish.queue.plan=Plan -isisfish.queue.progression=Progression -isisfish.queue.restartSimulation=Red\u00E9marrer -isisfish.queue.showLog=Voir les logs de la simulation -isisfish.queue.simulationLaunch=Lanceur de la queue des simulations -isisfish.queue.status=\u00C9tat -isisfish.queue.stopSimulation=Arr\u00EAter la simulation -isisfish.queue.title=Queue -isisfish.result.abundance=Abondance -isisfish.result.add=Ajouter un r\u00E9sultat -isisfish.result.begin.simulation=En d\u00E9but de simulation\: -isisfish.result.capture=Capturer -isisfish.result.capture.metier=Capturer par m\u00E9tier -isisfish.result.choose.simulation=Choisir une simulation -isisfish.result.datas=Donn\u00E9es -isisfish.result.datasRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.donneeRadioButton -isisfish.result.desktopPane=defaultToolTip-fr.ifremer.resultat.ResultatView.desktopPane -isisfish.result.dimension=Dimension -isisfish.result.end.simulation=En fin de Simulation\: -isisfish.result.export=Export -isisfish.result.export.file=Exporter un fichier texte -isisfish.result.file=Fichier -isisfish.result.graph=Graphe -isisfish.result.graphRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.graphRadioButton -isisfish.result.hpaned=defaultToolTip-fr.ifremer.resultat.ResultatEdit.hpaned2 -isisfish.result.infoPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.infoPanel -isisfish.result.label=defaultToolTip-fr.ifremer.resultat.ResultatView.label9 -isisfish.result.map=Carte -isisfish.result.mapRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.mapRadioButton -isisfish.result.menuExport=defaultToolTip-fr.ifremer.resultat.ResultatEdit.menuExport -isisfish.result.menubar=defaultToolTip-fr.ifremer.resultat.ResultatView.menubar1 -isisfish.result.menuitem=defaultToolTip-fr.ifremer.resultat.ResultatView.menuitem2 -isisfish.result.new.window=Ouvrir une nouvelle fen\u00EAtre -isisfish.result.openWindowButton=defaultToolTip-fr.ifremer.resultat.ResultatView.openWindowButton -isisfish.result.quit=Quitter -isisfish.result.reject.metier=Rejet par metier -isisfish.result.remove.simulation=Supprimer Simulation -isisfish.result.removeSimulationButton=defaultToolTip-fr.ifremer.resultat.ResultatView.supprimerSimulationButton -isisfish.result.resultat=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resultat -isisfish.result.scroll=defaultToolTip-fr.ifremer.resultat.ResultatEdit.scroll -isisfish.result.show.simulation.log=Voir les logs -isisfish.result.simulation=defaultToolTip-fr.ifremer.resultat.ResultatView.simulation -isisfish.result.statusBar=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusbar1 -isisfish.result.statusImage=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusImage -isisfish.result.stress.metier=Effort par metier -isisfish.result.summary=R\u00E9sum\u00E9 -isisfish.result.summaryRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resumeRadioButton -isisfish.result.table=defaultToolTip-fr.ifremer.resultat.ResultatView.table33 -isisfish.result.title=R\u00E9sultat -isisfish.result.tooltip.show.simulation.log=Cliquer pour afficher la console des logs de la simulation -isisfish.result.unload.metier=Debarquement par metier -isisfish.result.vbox=defaultToolTip-fr.ifremer.resultat.ResultatView.vbox1 -isisfish.result.viewPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.viewPanel -isisfish.resultChoice.save=R\u00E9sultats \u00E0 sauvegarder -isisfish.resultChoice.saved=R\u00E9sultats sauvegard\u00E9 -isisfish.resultChoice.title=Choix de r\u00E9sultats -isisfish.resume.matrixInfoGrid=defaultToolTip-fr.ifremer.resultat.ResumePanel.matriceInfoGrid -isisfish.resume.resumeTextArea=defaultToolTip-fr.ifremer.resultat.ResumePanel.resumeTextArea -isisfish.resume.scrolledwindow=defaultToolTip-fr.ifremer.resultat.ResumePanel.scrolledwindow2 -isisfish.resume.table=defaultToolTip-fr.ifremer.resultat.ResumePanel.table1 -isisfish.script.check=V\u00E9rifier -isisfish.script.commit=Commit -isisfish.script.compilation.failed=%s -isisfish.script.compilation.ok=Compilation r\u00E9ussie.\n--------------------\n\n%s -isisfish.script.copy=Copier -isisfish.script.cut=Couper -isisfish.script.evaluate=\u00C9valuer -isisfish.script.export=Exporter des scripts dans une archive zip -isisfish.script.export.cancel=annuler -isisfish.script.export.checkAll=Tout (d\u00E9-)s\u00E9lectionner -isisfish.script.export.chooseDir=... -isisfish.script.export.ok=exporter -isisfish.script.export.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les scripts \u00E0 exporter -isisfish.script.export.tooltip.chooseDir=Choisir le r\u00E9pertoire o\u00F9 exporter les scripts -isisfish.script.import=Importer des scripts depuis une archive zip -isisfish.script.import.cancel=annuler -isisfish.script.import.checkAll=Tout (d\u00E9-)s\u00E9lectionner -isisfish.script.import.labelAdd=Le(s) fichier(s) suivant(s) sera(ont) ajout\u00E9(s), Confirmer l'ajout -isisfish.script.import.labelOverwrite=Le(s) fichier(s) suivant(s) existe(nt) d\u00E9j\u00E0, Confirmer pour l'\u00E9crasement -isisfish.script.import.ok=importer -isisfish.script.import.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les scripts \u00E0 importer -isisfish.script.menu.checkSyntax=V\u00E9rifier la syntaxe -isisfish.script.menu.code=Code -isisfish.script.menu.commit=Commiter des scripts sur le serveur -isisfish.script.menu.copy=Copier -isisfish.script.menu.cut=Couper -isisfish.script.menu.deleteLocaly=Supprimer localement -isisfish.script.menu.deleteLocalyServer=Supprimer localement et sur le serveur -isisfish.script.menu.diff=Voir les diff\u00E9rences avec la version du serveur -isisfish.script.menu.edit=\u00C9dition -isisfish.script.menu.evaluate=Evaluer -isisfish.script.menu.file=Fichier -isisfish.script.menu.new=Nouveau -isisfish.script.menu.paste=Coller -isisfish.script.menu.save=Sauver -isisfish.script.menu.txtExport=Exporter -isisfish.script.menu.txtImport=Importer -isisfish.script.menu.txtNewAnalysePlan=Nouveau plan d'analyse -isisfish.script.menu.txtNewEquationModel=Nouvelle formule -isisfish.script.menu.txtNewExport=Nouveau script d'export -isisfish.script.menu.txtNewRule=Nouvelle r\u00E8gle -isisfish.script.menu.txtNewScript=Nouveau script -isisfish.script.menu.txtNewSensitivity=Nouveau calculateur de sensibilit\u00E9 -isisfish.script.menu.txtNewSimulator=Nouveau simulateur -isisfish.script.menu.txtVCS=Serveur -isisfish.script.menu.update=Synchronisation -isisfish.script.new=Nouveau -isisfish.script.paste=Coller -isisfish.script.save=Sauver -isisfish.script.title=Editeur de scripts -isisfish.script.txtExport=Exporter -isisfish.season.toString=saison %1$s-%2$s -isisfish.selectivity.equation=Equation -isisfish.selectivity.selectPopulation=S\u00E9lectionnez une population -isisfish.selectivity.title=S\u00E9lectivit\u00E9 -isisfish.sens.backParameter=Retour aux param\u00E8tres -isisfish.sens.title=Plan de simulation -isisfish.sensitivity.displaysecondpass=Afficher les r\u00E9sultats -isisfish.sensitivity.export=Export -isisfish.sensitivity.secondpass=Analyse des r\u00E9sultats -isisfish.sensitivity.secondpass.title=Analyse des r\u00E9sultats -isisfish.sensitivity.select=M\u00E9thode -isisfish.sensitivity.title=Analyse de sensibilit\u00E9 -isisfish.sensitivityChooser.title=M\u00E9thode de la sensibilit\u00E9 -isisfish.server.ssh.generateKey.title=G\u00E9n\u00E9rer une cl\u00E9 SSH -isisfish.setOfVessels.comments=Commentaires -isisfish.setOfVessels.fixedCosts=Co\u00FBts fixes -isisfish.setOfVessels.name=Nom -isisfish.setOfVessels.numberOfVessels=Nombre de navires -isisfish.setOfVessels.technicalEfficiency=\u00C9fficacit\u00E9 technique -isisfish.setOfVessels.title=Caract\u00E9ristiques -isisfish.setOfVessels.vesselType=Type de navire -isisfish.simpleResult.legendPanel=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.legendPanel -isisfish.simpleResult.more.information=Cliquer sur une cellule pour plus d'informations... -isisfish.simpleResult.resultatMap=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMap -isisfish.simpleResult.resultatMapToolBar=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMapToolBar -isisfish.simpleResult.table=defaultToolTip-fr.ifremer.isisfish.map.SimpleResultatMapBean.table12 -isisfish.simulation.log.console.title=Console de log simulation '%1$s' -isisfish.simulation.log.showConsole=affichage de la console de log pour la simulation %1$s -isisfish.simulation.menu.import=Restaurer les param\u00E9tres d'une simulation -isisfish.simulation.menu.save=Sauver les param\u00E8tres de la simulation -isisfish.simulation.menu.simulation=Simulation -isisfish.simulation.name=Nom de la simulation -isisfish.simulation.remote.message.connection=Connexion \u00E0 Caparmor -isisfish.simulation.remote.message.downloadresults=T\u00E9l\u00E9chargement des r\u00E9sultats -isisfish.simulation.remote.message.upload=Upload de la simulation -isisfish.simulation.remote.message.waitingavailable=Attente d'une place de simulation -isisfish.simulation.remote.message.waitingstart=Attente du d\u00E9marrage de la simulation -isisfish.simulation.restarting=Red\u00E9marrage... -isisfish.simulation.title=Lanceur de simulation -isisfish.simulator.launcher.inprocess=dans le m\u00EAme processus -isisfish.simulator.launcher.remote=sur le serveur Caparmor -isisfish.simulator.launcher.subprocess=dans un sous processus -isisfish.simulator.simulaction.badid=Impossible de lancer la simulation '%s' \: l'identifiant existe d\u00E9j\u00E0 \! -isisfish.simulator.ssh.configuration.connecting=Connexion en cours -isisfish.simulator.ssh.configuration.connectingpk=Connexion en cours (avec cl\u00E9 publique) -isisfish.simulator.ssh.configuration.connection=Information de connexion -isisfish.simulator.ssh.configuration.connectionerror=Connexion impossible (%s) -isisfish.simulator.ssh.configuration.connectionok=Connect\u00E9 avec succ\u00E8s -isisfish.simulator.ssh.configuration.environment=Configuration sur Caparmor -isisfish.simulator.ssh.configuration.invalidpassphrase=Passphrase invalide -isisfish.simulator.ssh.configuration.keygenerate=G\u00E9n\u00E9rer -isisfish.simulator.ssh.configuration.test=Tester la configuration -isisfish.simulator.ssh.configuration.title=Configuration du lanceur Caparmor -isisfish.simulator.subprocess.readoutput.error= -isisfish.species.age=Age -isisfish.species.cee=CEE -isisfish.species.comments=Commentaires -isisfish.species.length=Longueur -isisfish.species.name=Nom des esp\u00E8ces -isisfish.species.rubbinCode=Code Rubbin -isisfish.species.scientificName=Nom scientifique -isisfish.species.structured=Structur\u00E9 -isisfish.ssh.askpassphrase.message=Entrez la passphrase pour la cl\u00E9 '%s' \: -isisfish.ssh.askpassphrase.title=D\u00E9verrouillage de cl\u00E9 SSH -isisfish.ssh.askpassphrase.wrongpassphrase=Mauvaise cl\u00E9, entrez une nouvelle passphrase '%s' \: -isisfish.strategy.comments=Commentaires -isisfish.strategy.inactivity=Equation d'inactivit\u00E9 -isisfish.strategy.inactivityEquationUsed=Utiliser une \u00E9quation d'inactivit\u00E9 -isisfish.strategy.name=Nom -isisfish.strategy.proportionSetOfVessels=Proportion des ensembles de navires -isisfish.strategy.title=Caract\u00E9ristiques -isisfish.strategyMonthInfo.metier=M\u00E9tier -isisfish.strategyMonthInfo.minInactivityDays=Jour minimums d'inactivit\u00E9 -isisfish.strategyMonthInfo.numberOfTrips=Nombre de trajets -isisfish.strategyMonthInfo.proportion=Proportion -isisfish.strategyMonthInfo.title=Saisie des mois -isisfish.strategyMonthInfo.toString=%1$s %2$s -isisfish.timeUnit.day=Jour -isisfish.timeUnit.hours=Heures -isisfish.tray.simulation=Isis-fish - %1$s \: %2$s/%3$s -isisfish.tray.simulation.no=Isis-fish - Pas de simulation -isisfish.tripType.comments=Commentaires -isisfish.tripType.duration=Dur\u00E9e -isisfish.tripType.minTime=Temps minimal entre deux voyages -isisfish.tripType.name=Nom -isisfish.vcs.ask.passphrase=Entrez votre passe phrase (si votre clef ssh en contient une). -isisfish.vcs.ask.passphrase.title=Demande de passe phrase -isisfish.vcs.commit=Message de sauvegarde -isisfish.vcs.commit.cancel=annuler -isisfish.vcs.commit.label=Entrer quelques mots concernant la modification des scripts -isisfish.vcs.commit.ok=confirmer -isisfish.vcs.init.notfoundcantdownload=La base de donn\u00E9es pour la version %s n'a ni pu \u00EAtre trouv\u00E9e, ni t\u00E9l\u00E9charg\u00E9e.\nVous devez la t\u00E9l\u00E9charger manullement \u00E0 partir du site d'Isis-Fish. -isisfish.vcs.init.wrongprotocol=Votre base de donn\u00E9es locale \: %s n'utilise pas un protocole correct.\nVoulez-vous faire une sauvegarde de cette base et r\u00E9cup\u00E9rer une meilleure version ? -isisfish.vcs.switchprotocol.confirm=Le protocole d'acc\u00E8s au d\u00E9p\u00F4t des scripts a chang\u00E9.\nVoulez-vous changer vers le nouveau d\u00E9p\u00F4t ? -isisfish.vcs.switchtag.warningconflict=Votre base de donn\u00E9es a \u00E9t\u00E9 mise \u00E0 jour\nmais les fichiers suivants sont en conflit, merci de les v\u00E9rifier \:\n -isisfish.vcs.switchversion.confirm=Vous n'utilisez pas le d\u00E9p\u00F4t correct pour votre version d'Isis-Fish \: %s.\nVoulez-vous changer de d\u00E9p\u00F4t ? -isisfish.vcs.update=R\u00E9sultats de la synchronisation avec le serveur -isisfish.vcs.update.cancel=annuler -isisfish.vcs.update.checkAll=(de)-select tout -isisfish.vcs.update.local=Systeme local -isisfish.vcs.update.local.modified=Fichiers modifi\u00E9s -isisfish.vcs.update.local.outofdateAndModified=Fichiers localement modifi\u00E9s en conflit avec le serveur -isisfish.vcs.update.local.tooltip.modified=Fichiers localement modifi\u00E9s \n(confirmer pour revenir \u00E0 la version avant modification ou soum\u00EAtre au serveur) -isisfish.vcs.update.local.tooltip.outofdateAndModified=Fichiers localement modifi\u00E9s mais ayant une version plus r\u00E9cente sur le serveur\n (confirmer pour revenir \u00E0 la version avant modification ou r\u00E9cup\u00E9rer la nouvelle version du serveur) -isisfish.vcs.update.local.tooltip.unversionned=Fichiers uniquement pr\u00E9sents sur votre systeme \n(confirmer pour les enregister sur le serveur) -isisfish.vcs.update.local.unversionned=Nouveaux fichiers -isisfish.vcs.update.ok=continuer -isisfish.vcs.update.remote=Serveur distant -isisfish.vcs.update.remote.missing=Nouveaux fichiers -isisfish.vcs.update.remote.outofdate=Fichiers plus r\u00E9cents sur le serveur -isisfish.vcs.update.remote.tooltip.missing=Nouveaux fichiers uniquement pr\u00E9sents sur le serveur \n(confirmer pour les r\u00E9cup\u00E9rer) -isisfish.vcs.update.remote.tooltip.outofdate=Fichiers dont il existe une version plus r\u00E9cente sur le serveur \n(confirmer pour les r\u00E9cup\u00E9rer) -isisfish.vcs.update.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les fichiers (\u00E0 action unique) que vous voulez traiter -isisfish.vcs.update.tooltip.local=vcs.update.tooltip.local -isisfish.vcs.update.tooltip.remote=vcs.update.tooltip.remote -isisfish.vcs.update.warningconflict=Votre base de donn\u00E9es a \u00E9t\u00E9 mise \u00E0 jour\nmais les fichiers suivants sont en conflit, merci de les v\u00E9rifier \:\n -isisfish.vcs.updateconfirm=Confirmation des ope\u00E9rations de synchronisation avec le serveur -isisfish.vcs.updateconfirm.cancel=annuler -isisfish.vcs.updateconfirm.checkAll=(de)-select tout -isisfish.vcs.updateconfirm.label=Confirmer les op\u00E9rations qui pourraient \u00E9craser vos fichiers -isisfish.vcs.updateconfirm.label2='Etes vous sur de vouloir effectuer ces op\u00E9rations ?' -isisfish.vcs.updateconfirm.ok=confirmer -isisfish.vcs.updateconfirm.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les scripts que vous voulez traiter -isisfish.vcs.updaterepository.confirm=Votre d\u00E9p\u00F4t des scripts n'est pas \u00E0 jour. Voulez-vous mettre \u00E0 jour les fichiers suivants ? -isisfish.vcs.vcssvn.add.error=Impossible d'ajouter un fichier -isisfish.vcs.vcssvn.add.errorreadonly=Vous ne pouver pas ajouter de fichier, ce d\u00E9p\u00F4t est en lecture seule \! -isisfish.vcs.vcssvn.checkProtocol.error=Impossible d'obtenir l'adresse correspondant au d\u00E9p\u00F4t local -isisfish.vcs.vcssvn.checkProtocol.relocate=Transfert du d\u00E9p\u00F4t %s de %s vers %s -isisfish.vcs.vcssvn.checkout.error=Impossible de mettre \u00E0 jour -isisfish.vcs.vcssvn.cleanup.error=Impossible de d\u00E9verrouiller la copie locale -isisfish.vcs.vcssvn.commit.error=Impossible de commiter -isisfish.vcs.vcssvn.commit.errorreadonly=Vous ne pouvez pas commiter, le d\u00E9p\u00F4t est en lecture seule -isisfish.vcs.vcssvn.delete.error=Impossible de supprimer des fichiers -isisfish.vcs.vcssvn.delete.errorreadonly=Vous ne pouvez pas supprimer ce fichier, le d\u00E9p\u00F4t est en lecture seule -isisfish.vcs.vcssvn.diff.error=Impossible d'obtenir le diff -isisfish.vcs.vcssvn.gettag.error=Erreur lors de la r\u00E9cup\u00E9ration de l'adresse du d\u00E9p\u00F4t local -isisfish.vcs.vcssvn.getupdate.error=Impossible d'obtenir le statut des fichiers -isisfish.vcs.vcssvn.global.filelocalandremotestatus=Le statut du fichier %s est (l\:%s/d\:%s) -isisfish.vcs.vcssvn.global.filestatus=Le statut de %s est %s -isisfish.vcs.vcssvn.global.foundUpdatedFile=Ajout de %s comme fichier mis \u00E0 jour -isisfish.vcs.vcssvn.global.torevision=\u00C0 la r\u00E9vision \: %d -isisfish.vcs.vcssvn.isconnected.switchoff=Impossible de se connecter au serveur, passage en mode d\u00E9connect\u00E9 \: %s -isisfish.vcs.vcssvn.isconnected.switchto=Connexion au serveur disponible, passage en mode connect\u00E9 \: %s -isisfish.vcs.vcssvn.isonremote.error=Le fichier %s n'est pas sur le serveur -isisfish.vcs.vcssvn.istag.notexist=Le tag %s n'existe pas -isisfish.vcs.vcssvn.isuptodate.error=Impossible d'obtenir le statut de fichier -isisfish.vcs.vcssvn.list.error=Impossible de lister -isisfish.vcs.vcssvn.localstatus.error=Impossible d'obtenir le statut local de fichier -isisfish.vcs.vcssvn.remotestatus.error=Impossible d'obtenir le statut distant de fichier -isisfish.vcs.vcssvn.setTag.error=Erreur lors de la r\u00E9cup\u00E9ration de l'adresse du d\u00E9p\u00F4t local -isisfish.vcs.vcssvn.settag.switchfromto=Switch du tag du d\u00E9p\u00F4t de %s \u00E0 %s -isisfish.vcs.vcssvn.update.error=Impossible de mettre \u00E0 jour -isisfish.vcs.vcssvn.update.notinlocal=Impossible de mettre \u00E0 jour des fichiers qui ne sont pas pas dans le d\u00E9p\u00F4t -isisfish.versionStorage.removed=Supprim\u00E9 -isisfish.vesselType.activityRange=Intervalle d'activit\u00E9 -isisfish.vesselType.comments=Commentaires -isisfish.vesselType.fuelCost=Co\u00FBt d'un trajet en fuel -isisfish.vesselType.length=Longueur -isisfish.vesselType.maxDuration=Dur\u00E9e maximale du trajet -isisfish.vesselType.miniCrew=Taille minimale d'\u00E9quipage -isisfish.vesselType.name=Nom -isisfish.vesselType.speed=Vitesse -isisfish.welcome.menu.about=\u00C0 propos -isisfish.welcome.menu.api=API -isisfish.welcome.menu.close=Fermer -isisfish.welcome.menu.configuration=Configuration -isisfish.welcome.menu.configuration.sshlauncher=Configuration Caparmor -isisfish.welcome.menu.configuration.vcs=Configuration vcs -isisfish.welcome.menu.file=Fichier -isisfish.welcome.menu.frame=Fen\u00EAtre -isisfish.welcome.menu.help=Aide -isisfish.welcome.menu.help.isisfish=Site d'Isis-Fish -isisfish.welcome.menu.help.isisfishapi=API Isis-Fish -isisfish.welcome.menu.help.javaapi=API Java -isisfish.welcome.menu.help.lutinmatrixapi=API LutinMatrix -isisfish.welcome.menu.help.topiaapi=API ToPIA -isisfish.welcome.menu.input=Saisie -isisfish.welcome.menu.monitor=Fen\u00EAtre de logs -isisfish.welcome.menu.queue=Liste des simulations -isisfish.welcome.menu.result=R\u00E9sultat -isisfish.welcome.menu.script=Script -isisfish.welcome.menu.simulation=Lanceur de simulations -isisfish.welcome.menu.synchro=Synchronisation Serveur -isisfish.welcome.title=Simulation Ifremer -isisfish.wizardGroupCreation.allGroupsSameSize=Tous les groupes ont la m\u00EAme taille -isisfish.wizardGroupCreation.allValues=Entrer toutes les valeurs -isisfish.wizardGroupCreation.computedGrowthCurve=Calcul\u00E9 par une courbe de croissance -isisfish.wizardGroupCreation.firstAge=Premier age -isisfish.wizardGroupCreation.firstAgeHelp=Premier age \= age minimal -isisfish.wizardGroupCreation.firstGroup=Premier groupe -isisfish.wizardGroupCreation.firstLength=Premi\u00E8re taille -isisfish.wizardGroupCreation.firstLengthHelp=Premi\u00E8re taille \= taille minimale du premier groupe -isisfish.wizardGroupCreation.gapBetweenGroupsHelp=L'interval entre chaque groupe est de 1 an -isisfish.wizardGroupCreation.groupWidth=Longueur du groupe -isisfish.wizardGroupCreation.groupWidthHelp=Longueur du groupe \= Longueur du groupe -isisfish.wizardGroupCreation.lastAge=Dernier age -isisfish.wizardGroupCreation.lastAgeHelp=Dernier age \= age maximal -isisfish.wizardGroupCreation.maxGroupsLength=Taille maximale de groupes -isisfish.wizardGroupCreation.maxGroupsLengthHelp=Un point-virgule ';' doit s\u00E9parer les tailles maximales de chaque groupe -isisfish.wizardGroupCreation.numberGroup=Nombre de groupe -isisfish.wizardGroupCreation.numberGroupHelp=Nombre de groupe \= Nombre de groupe voulu -isisfish.wizardGroupCreation.numberGroups=Nombre de groupes -isisfish.wizardGroupCreation.populationCharacteristics=Entrez les caract\u00E9ristiques de la population -isisfish.wizardGroupCreation.selectGroupLengthType=Choisir la longueur du groupe -isisfish.wizardGroupCreation.timeStep=Pas de temps (en mois) -isisfish.wizardGroupCreation.title=Cr\u00E9ation du groupe -isisfish.wizardGroupCreation.undefinedGrowthEquation=L'\u00E9quation utilis\u00E9e est la courbe de croissance de la population. Elle doit \u00EAtre pr\u00E9alablement d\u00E9finie. -isisfish.zone.cells=Cellules de la zone -isisfish.zone.comments=Commentaires -isisfish.zone.name=Nom -region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= -simulate\ %s\ with\ file\ %s= Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties (from rev 2489, isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,1103 @@ +Add\ to\ %s\ queue= +Add\ to\ default\ queue= +Analyse\ plan\ error,\ too\ many\ simulation\ for\ %s\ \:\ %s= +Can't\ add\ result\ '%1$s'\ at\ date\ %2$s=Can't add result '%1$s' at date %2$s +Can't\ add\ simulation\:\ = +Can't\ create\ simulation\ logger=Can't create simulation logger +Can't\ delete\ simulation\ %s\ = +Can't\ do\ post\ action\ %s= +Can't\ do\ simulation\ %s= +Can't\ download\ archive\ \:\ %s= +Can't\ download\ file= +Can't\ evaluate\ simulation\ prescript= +Can't\ export\ simulation\ %s= +Can't\ get\ changlog=Impossible d'obtenir de changelog +Can't\ get\ result\:\ %1$s=Can't get result\: %1$s +Can't\ instanciate\ export\ %1$s=Can't instanciate export %1$s +Can't\ instanciate\ wanted\ VCS\ (%s),\ use\ default= +Can't\ instantiate\ %s= +Can't\ open\ log\ for\ %s= +Can't\ read\ ssh\ key\ \:\ %s= +Can't\ simulate\ %s= +Check\ state\ of\ local\ repository\:\ %s= +Check\ syntax\ of\ the\ current\ script= +Checkout\ pom.xml\ to\ %s= +Command\ '%s'\ fail\ to\ execute= +Commit\ script\ to\ CVS\ server= +Copy\ current\ selection\ (Ctrl-c)= +Could\ not\ found\ formule\ type\ %s\ autorised\ type\ are\ %s= +Create\ a\ new\ script= +Cut\ current\ selection\ (Ctrl-x)= +Error\ during\ vcs\ initialisation= +Error\ while\ uploading\ public\ key\ to\ remote\ serveur\ authorized_keys= +Export\ selected\ script(s)\ to\ zip\ archive= +Generate\ next\ simulation= +Import\ one\ java\ file\ script\ source= +Import\ simulation\ file\ %s\ in\ directory\ %s\ and\ rename\ from\ %s\ to\ %s= +Import\ zipped\ file\ containing\ all\ scripts\ directory\ structure= +Info=Info +Jobs\ submited\ is\ not\ ItemSimulation\ but\ was\ %s= +Last\ entry\ was\ %s\ extract\ name\ %s= +Launcher\ %s\ will\ be\ stopped\ because\ there\ are\ too\ many\ error\ (%s)= +Local\ repository\ don't\ exist= +Local\ repository\ exists\ but\ it's\ not\ valide\ for\ current\ vcs\:\ %s= +Normal\ stop\ thread,\ this\ is\ not\ an\ error= +Not\ start\ simulation\ %s\ because\ user\ ask\ stop= +Paste\ current\ selection\ (Ctrl-v)= +Process\ template\ error= +Region\ %s\ allready\ exist\ in\ repository.\ Can't\ import= +Region\ %s\ already\ inited=La r\u00E9gion %s a d\u00E9j\u00E0 \u00E9t\u00E9 initialis\u00E9e +Remote\ IsisFish\ server= +Remote\ control\ file\ doesn't\ exists\ %s= +Remote\ information\ file\ doesn't\ exists\ %s= +Rename\ data\ directory\ to\ %s= +Save\ current\ script= +Show\ help= +SimulationExecutor\ started\ with\ %s\ thread\ for\ %s= +Ssh\ key\ found\ '%s'\ will\ be\ used\ to\ connect\ to= +Stop\ simulation\ plan,\ because\ can't\ call\ afterSimulation\ correctly\ on\ plan\ %s= +Stop\ the\ process= +SubProcess\ start\:\ %s\ %s= +Switch\ repository\ type\ to\ none= +Try\ to\ eval\ current\ script\ (must\ be\ have\ main\ method)= +Try\ to\ log\ on\ %s@%s\:%d= +Use\ branches,\ switch\ not\ needed= +User\ restart\ simulation\ %s= +User\ stop\ simulation\ %s= +could\ not\ close\ reader\ %1$s=could not close reader %1$s +could\ not\ create\ simulation\ filter\ model\ for\ reason\ %1$s=could not create simulation filter model for reason %1$s +could\ not\ filter\ on\ simulations=could not filter on simulations +could\ not\ found\ %s= +could\ not\ found\ log\ file\ %1$s=could not found log file %1$s +could\ not\ found\ region\ %s= +could\ not\ found\ simulation\ %s= +could\ not\ read\ at\ offset\ %1$s\ for\ reason\ %2$s=could not read at offset %1$s for reason %2$s +destination\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= +destination\ already\ exists\ %s\ use\ \\'force\\'\ argument\ to\ force\ overwrite= +directory\ %s\ must\ be\ a\ directory= +filter\ loaded\ in\ %1$s\ ms\ \:\ found\ %2$s\ lines.=filter loaded in %1$s ms \: found %2$s lines. +in\ hour= +isisfish.about.abouthtmltext=<html><b>Isis-Fish (%s)</b><br /><br />Copyright IFREMER-MAERHA 2000-2009.<br /><br /><a href\="http\://isis-fish.labs.libre-entreprise.org">http\://isis-fish.labs.libre-entreprise.org</a><br /><br />Merci de rapporter les bugs.<html> +isisfish.about.licensetext=Vous pouvez modifier et redistribuer ce programme sous les conditions \u00E9nonc\u00E9es par la licence GNU GPL (version 2 ou ult\u00E9rieure). Une copie de la licence GPL est dans le fichier \u00AB\u00A0LICENSE.txt\u00A0\u00BB fourni avec Isis-Fish. Tous droits r\u00E9serv\u00E9s. Aucune garantie n'est fournie pour l'utilisation de ce programme. +isisfish.about.title=\u00C0 propos de Isis-Fish... +isisfish.advancedParameters.title=Param\u00E8tres avanc\u00E9s +isisfish.advancedParams.freeParameters=Param\u00E8tres libres +isisfish.advancedParams.libLevelLogger=Niveau de tracage des librairies +isisfish.advancedParams.scriptLevelLogger=Niveau de tracage des scripts +isisfish.advancedParams.simulLevelLogger=Niveau de tracage du simulateur +isisfish.advancedParams.simulationCache=Simulation cache +isisfish.advancedParams.simulationStatistique=Simulation statistique +isisfish.advancedParams.simulatorUse=Simulateur \u00E0 utiliser +isisfish.cell.comments=Commentaires +isisfish.cell.land=Terre +isisfish.cell.latitude=Latitude +isisfish.cell.longitude=Longitude +isisfish.cell.name=Nom +isisfish.change.equation=Ne peut pas changer l'\u00E9quation +isisfish.commit.message=Entrer un message de commit +isisfish.common.add=Ajouter +isisfish.common.add.short=Aj. +isisfish.common.alert=alerte +isisfish.common.apply=Appliquer +isisfish.common.blank=\ +isisfish.common.cancel=Annuler +isisfish.common.check=V\u00E9rifier +isisfish.common.clear=Effacer +isisfish.common.date=Date +isisfish.common.debug=Debug +isisfish.common.delete=Supprimer +isisfish.common.ellipsis=... +isisfish.common.emigration=\u00E9migration +isisfish.common.equation=Equation +isisfish.common.error=Erreur +isisfish.common.finish=Terminer +isisfish.common.gear=Engin +isisfish.common.immigration=immigration +isisfish.common.info=Info +isisfish.common.migration=migration +isisfish.common.month=mois %1$s +isisfish.common.name=Nom +isisfish.common.new=Nouveau +isisfish.common.newMatrix=Nouvelle matrice +isisfish.common.next=Suivant +isisfish.common.ok=Ok +isisfish.common.openEditor=Ouvrir l'\u00E9diteur +isisfish.common.population=Population +isisfish.common.populationGroup=Groupe de population +isisfish.common.populations=Populations +isisfish.common.port=port +isisfish.common.prev=Pr\u00E9c\u00E9dent +isisfish.common.region=R\u00E9gion +isisfish.common.remove=Supprimer +isisfish.common.reset=R\u00E9initialiser +isisfish.common.rules=R\u00E8gles +isisfish.common.save=Sauver +isisfish.common.saveModel=Sauver comme mod\u00E8le +isisfish.common.saveNextSimulation=Sauver pour la prochaine simulation +isisfish.common.season=Saison +isisfish.common.setOfVessels=Ensemble de navires +isisfish.common.simulate=Simuler +isisfish.common.stop=Arr\u00EAter +isisfish.common.strategies=Strat\u00E9gies +isisfish.common.sum=somme +isisfish.common.tag=Tag +isisfish.common.tripType=Type de trajet +isisfish.common.valid=Valider +isisfish.common.value=Valeur +isisfish.common.warn=Warning +isisfish.common.year=ann\u00E9e +isisfish.common.zone=Zone +isisfish.config.database.lockmode.description= +isisfish.config.main.compileDirectory.description=le r\u00E9pertoire o\u00F9 sont compil\u00E9s les scripts +isisfish.config.main.configFileName.description=le fichier de configuration \u00E0 utiliser +isisfish.config.main.defaultBackupDirectory.description=le r\u00E9pertoire o\u00F9 stocker les backups des donn\u00E9es +isisfish.config.main.defaultExportDirectory.description=le r\u00E9pertoire o\u00F9 exporter les r\u00E9sultats des simulations +isisfish.config.main.defaultExportNames.description=les noms des exports \u00E0 effectuer apr\u00E8s une simulation +isisfish.config.main.defaultMapFile.description=TODO +isisfish.config.main.defaultResultNames.description=les noms des r\u00E9sultats \u00E0 traiter apr\u00E8s une simulation +isisfish.config.main.defaultSimulator.description=le nom du simulateur par d\u00E9faut \u00E0 utiliser lors d'une simulation +isisfish.config.main.defaultTagValue.description=TODO +isisfish.config.main.encoding.description=l'encoding du syst\u00E8me +isisfish.config.main.javadocDirectory.description= +isisfish.config.main.javadocURL.description=l'url de la javadoc des scripts +isisfish.config.main.launchUI.description= +isisfish.config.main.localSimulator.description=pour indiquer si les simulations sont \u00E0 effectuer localement +isisfish.config.main.locale.description=la locale utilisateur +isisfish.config.main.login.description=le login pour se connecter au serveur de simulations distant +isisfish.config.main.password.description=le mot de passe pour se connecter au serveur de simulations distant +isisfish.config.main.projectName.description=le nom du projet +isisfish.config.main.regionMap.description=le nom du r\u00E9pertoire contenant les maps d'une r\u00E9gion +isisfish.config.main.remoteCaparmor.description=lance les simulations sur un serveur distant +isisfish.config.main.resultExport.description=TODO +isisfish.config.main.simulation.max.simultaneous.simulation=Nombre de simulations simultan\u00E9es +isisfish.config.main.simulation.max.simultaneous.simulation.description=Nombre maximum de simulations pouvant \u00EAtre envoy\u00E9es au serveur +isisfish.config.main.simulation.ssh.control.check.interval=V\u00E9rification de la progression (secondes) +isisfish.config.main.simulation.ssh.control.check.interval.description=Temps d'attente en secondes entre deux v\u00E9rifications de progression +isisfish.config.main.simulation.ssh.datapath=Base de donn\u00E9es +isisfish.config.main.simulation.ssh.datapath.description=Emplacement de la base de donn\u00E9es (isis-database) +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.pbsbinpath=Emplacement des executables PBS +isisfish.config.main.simulation.ssh.pbsbinpath.description=Emplacement des commandes PBS (qsub, qdel...) sur le serveur +isisfish.config.main.simulation.ssh.server=Adresse du serveur +isisfish.config.main.simulation.ssh.server.description=Adresse du serveur +isisfish.config.main.simulation.ssh.tmppath=Dossier temporaire +isisfish.config.main.simulation.ssh.tmppath.description=Emplacement du dossier temporaire +isisfish.config.main.simulation.ssh.userhome=R\u00E9pertoire d'accueil +isisfish.config.main.simulation.ssh.userhome.description=R\u00E9pertoire d'accueil de l'utilisateur +isisfish.config.main.simulation.ssh.username=Identifiant +isisfish.config.main.simulation.ssh.username.description=Identifiant SSH pour se connecter au serveur +isisfish.config.main.simulationServer.description=l'url du serveur de simulations distant +isisfish.config.main.simulationShowOnlyError.description=pour indiquer si l'on doit conserver dans l'UI des simulations termin\u00E9es uniquement celles avec erreur +isisfish.config.main.simulationShowOnlyQueue.description=pour indiquer si l'on doit conserver dans l'UI des simulations termin\u00E9es uniquement celles effectu\u00E9es localement +isisfish.config.main.smtpServer.description=le nom du serveur smtp \u00E0 utiliser pour envoyer les courriels +isisfish.config.main.subSimulator.description=pour indiquer si les simulations sont \u00E0 effectuer localement dans un sous process +isisfish.config.main.userMail.description=le courriel de l'utilisateur +isisfish.config.main.userName.description=le nom - pr\u00E9nom de l'utilisateur +isisfish.config.ssh.key.file=Cl\u00E9 SSH +isisfish.config.ssh.key.file.description=Emplacement de la cl\u00E9 priv\u00E9e SSH +isisfish.config.vcs.hostName.description=le nom du serveur vcs \u00E0 utiliser +isisfish.config.vcs.keyFile.description=le chemin complet du fichier de clef priv\u00E9e ssh2 \u00E0 utiliser lors d'une connexion s\u00E9curis\u00E9e +isisfish.config.vcs.localDatabasePath.description= +isisfish.config.vcs.noPassPhrase.description=pour indiquer si la clef priv\u00E9e ssh2 utilis\u00E9e pour communiquer avec le serveur vcs est prot\u00E9g\u00E9 par une passe-phrase +isisfish.config.vcs.passphrase.description=la passe-phrase utilis\u00E9e pour prot\u00E9ger la clef priv\u00E9e ssh +isisfish.config.vcs.remoteDatabase.description=le nom du module de donn\u00E9es sur le serveur vcs +isisfish.config.vcs.remotePath.description=le chemin jusqu'au parent du module de donn\u00E9es sur le serveur vcs +isisfish.config.vcs.type.description=le type de communication vcs utilis\u00E9 +isisfish.config.vcs.typeRepo.description=le type de r\u00E9pository vcs utilis\u00E9 +isisfish.config.vcs.useSshConnexion.description=pour indiquer si l'on utilise une connexion s\u00E9curis\u00E9e pour communiquer avec le serveur vcs (ssh2) +isisfish.config.vcs.userName.description=le login de l'utilisateur sur le serveur vcs +isisfish.config.vcs.userPassword.description= +isisfish.dataResult.descriptionLabel=defaultToolTip-fr.ifremer.resultat.DataResult.descriptionLabel +isisfish.dataResult.export.csv=Exporter en CSV +isisfish.dataResult.exportButton=defaultToolTip-fr.ifremer.resultat.DataResult.exportButton +isisfish.dataResult.label=label9 +isisfish.dataResult.matriceTable=defaultToolTip-fr.ifremer.resultat.DataResult.matriceTable +isisfish.dataResult.scrolledwindow2=defaultToolTip-fr.ifremer.resultat.DataResult.scrolledwindow2 +isisfish.dataResult.table2=defaultToolTip-fr.ifremer.resultat.DataResult.table2 +isisfish.date.toString=%1$s %2$s +isisfish.effortDescription.crewFoodCost=Co\u00FBt de l'alimentation pour l'\u00E9quipage +isisfish.effortDescription.crewShareRate=Taux de partage de l'\u00E9quipage +isisfish.effortDescription.crewSize=Taille de l'\u00E9quipage +isisfish.effortDescription.economicTitle=Param\u00E8tres \u00E9conomiques +isisfish.effortDescription.effortTitle=Param\u00E8tres d'effort de p\u00EAche +isisfish.effortDescription.fishingOperation=Op\u00E9ration de p\u00EAche +isisfish.effortDescription.fishingOperationDuration=Dur\u00E9e de la p\u00EAche +isisfish.effortDescription.fishingOperationDuration.tooltip=En heures +isisfish.effortDescription.fixedCrewSalary=Salaire d'\u00E9quipage fixe +isisfish.effortDescription.gearsNumberPerOperation=Nombre d'engins par op\u00E9ration +isisfish.effortDescription.landingCosts=Co\u00FBts d'accastillage +isisfish.effortDescription.otherRunningCost=Autres co\u00FBts +isisfish.effortDescription.parametersTitle=Param\u00E8tres des m\u00E9tiers +isisfish.effortDescription.repairAndMaintenanceGearCost=Co\u00FBts de maintenance +isisfish.effortDescription.title=M\u00E9tiers pratiqu\u00E9s +isisfish.effortDescription.toString=EffortDescription for %1$s with %2$s +isisfish.effortDescription.unitCostOfFishing=Co\u00FBt unitaire de la p\u00EAche +isisfish.equation.editor.title=Editeur d'\u00E9quation +isisfish.error.acceptable.population=La nouvelle valeur n'est pas une valeur valide pour cette population +isisfish.error.add.card=Erreur lors de l'ajout du r\u00E9sultat \u00E0 la carte. +isisfish.error.add.logger.simulation=isisfish.error.add.logger.simulation +isisfish.error.add.result.data=Erreur lors de l'ajout du r\u00E9sultat au data. +isisfish.error.add.result.graph=Erreur lors de l'ajout du r\u00E9sultat au graph. +isisfish.error.add.tray=Impossible d'ajouter une icone de notification +isisfish.error.change.classloader=Can't change classloader because can't create URL from file %1$s +isisfish.error.change.equation=Can't change equation +isisfish.error.check.region= +isisfish.error.compile.fileerror=Le fichier %s contient des erreurs \! +isisfish.error.compile.script=Impossible de compiler le script \: %s +isisfish.error.compiled.parameter=Can't get rule parameter from compiled class +isisfish.error.conversion.data=Erreur lors de la conversion du fichier de donn\u00E9es +isisfish.error.create.equation=Can't create equation +isisfish.error.delete.database=Can't delete database +isisfish.error.delete.file=could not delete file %1$s +isisfish.error.delete.vcs.files=Can't delete vcs files +isisfish.error.during.simulation=Error during simulation +isisfish.error.emigration.negative=emigration negative +isisfish.error.empty.code.rubbin=le code rubbin est vide +isisfish.error.empty.emigration=emigration vide +isisfish.error.empty.id.geographic=l'identifiant g\u00E9ographique est vide +isisfish.error.empty.immigration=immigration vide +isisfish.error.empty.migration=Migration vide +isisfish.error.empty.name=le nom est vide +isisfish.error.empty.params.name=le nom du param\u00E8tre est vide +isisfish.error.empty.population=Population est vide +isisfish.error.empty.scientific.name=le nom scientifique est vide +isisfish.error.empty.season=info saison vide +isisfish.error.empty.selectivity=s\u00E9lectivit\u00E9 est vide +isisfish.error.empty.species=espece capturable vide +isisfish.error.empty.species.name=le nom d'espece est vide +isisfish.error.empty.unit=l'unit\u00E9 de mesure est vide +isisfish.error.equation.return.number=EquationImpl must retun a number\: %1$s +isisfish.error.evaluate.equation=Can't evaluate equation\: %1$s +isisfish.error.evaluate.preplan.script= +isisfish.error.evalute.plan.script=Can't evaluate plan script +isisfish.error.factor.invalid=Le facteur n'est pas valide +isisfish.error.file.already.exists=The file %1$s already exist +isisfish.error.get.fisheryRegion=Can't get FisheryRegion +isisfish.error.growth.equation.before.create.group.population=Error, You must input growth equation before create the group population +isisfish.error.immigration.negative=immigration negative +isisfish.error.import.convertible=Erreur lors de l'import, la version du fichier que vous souhaitez importer n'est pas transformable en une version importable. +isisfish.error.import.file=Can't import file %1$s +isisfish.error.import.recent.files=Erreur lors de l'import, la version du fichier que vous souhaitez importer est plus r\u00E9cente que la version souhait\u00E9e. +isisfish.error.init.map=Can't init map. +isisfish.error.init.remove.button=could not init remove button (button or list is null) button \: %1$s, list \: %2$s +isisfish.error.instanciate=Can't instanciate %1$s +isisfish.error.instanciate.export=Can't instanciate export %1$s +isisfish.error.invalid.costs.fix=les co\u00FBts fixes sont invalides +isisfish.error.invalid.distribution.recruitment=distribution de recrutement invalide +isisfish.error.invalid.equation=Equation invalide +isisfish.error.invalid.equation.name=Nom d'\u00E9quation invalide +isisfish.error.invalid.file.name=Le nom du script %1$s n'est pas valide. +isisfish.error.invalid.interval.reproduction.recruitment=interval entre la reproduction et le recrutement invalide +isisfish.error.invalid.mean.weight=poids moyen invalide +isisfish.error.invalid.natural.death=mortalit\u00E9 naturelle sur les classes naissantes invalide +isisfish.error.invalid.number=le nombre est invalide +isisfish.error.invalid.range=La gamme possible n'a pas de valeur acceptable +isisfish.error.invalid.values.params=Param\u00E8tre controlable hors valeurs possibles +isisfish.error.invalidate.natural.death=mortalite naturelle invalide +isisfish.error.invoke.method=Can't invoke method '%1$s' for class %2$s +isisfish.error.linkageerror.message=Isis-Fish a d\u00E9tect\u00E9 une erreur d'utilisation des scripts.\nLe dossier de compilation a \u00E9t\u00E9 supprim\u00E9 pour forcer leur recompilation.\n\nMerci de relancer Isis-Fish. +isisfish.error.linkageerror.title=Erreur d'initialisation +isisfish.error.load.class=Can't load class\: %1$s +isisfish.error.load.classloader=Can't create ClassLoader for script, bad directory\: %1$s for reason %2$s +isisfish.error.load.file=could not load file %1$s +isisfish.error.load.map=Can't load map file\: %1$s +isisfish.error.log.closeAppender=n'a pas pu ferme l'appender %1$s et la categorie %2$s +isisfish.error.log.console.dispose=Une erreur est survenue pendant la fermeture de la console %1$s de log, raison %2$s +isisfish.error.log.createAppender=n'a pas pu creer l'appender [%1$s] \: %2$s pour la raison %3$s +isisfish.error.log.foundAppender=n'a pas trouve l'appender %1$s pour la categorie %2$s +isisfish.error.matrix.more.2d=Matrice de plus de 2 dimensions\!\!\nS\u00E9lectionnez moins d'\u00E9l\u00E9ments ou utilisez l'op\u00E9rateur somme. +isisfish.error.migration.negative=Migration negative +isisfish.error.no.matrix=No matrix for\: +isisfish.error.no.null.time.step=Error, the time step should not be null +isisfish.error.no.sector=il n'y a pas de secteur de d\u00E9finit +isisfish.error.no.select.simulation=could not select simulation +isisfish.error.no.target.species=no target species in %1$s for %2$s +isisfish.error.not.found.code=could not found codeclass for %1$s +isisfish.error.not.found.description=could not found description for %1$s +isisfish.error.not.found.field=could not found field %1$s doc for %2$s +isisfish.error.not.found.field.class=could not found field %1$s for class %2$s +isisfish.error.not.null.class.grown=classe mature vaut nul +isisfish.error.not.null.mean.weight=poids moyen nul +isisfish.error.not.null.natiral.death=mortalite naturelle nulle +isisfish.error.not.possible.metier=Pas de m\u00E9tier possible +isisfish.error.not.support.class=La classe %s ne supporte pas les descritions +isisfish.error.number.classes.upper.zero=Error, the number of classes must be upper than 0 +isisfish.error.out.memory=Out of memory try with more memory (option -mx) +isisfish.error.overlap.season=Cette saison chevauche une autre saison +isisfish.error.parse.date=Can't parse date %1$s +isisfish.error.parse.long=Can't parse long %1$s +isisfish.error.plan.parameter=Can't get plan parameter from compiled class +isisfish.error.prepare.data=Can't prepare data +isisfish.error.prepare.information.simulation=Can't prepare information for simulation +isisfish.error.read.simulation=Can't read simulation information %1$s +isisfish.error.read.simulation.parameters=Impossible de lire les param\u00EAtres du fichier \: %1$s +isisfish.error.region.already.exists=Cette r\u00E9gion existe d\u00E9j\u00E0 +isisfish.error.region.name.empty=Le nom de la R\u00E9gion est vide +isisfish.error.remove.directory=Can't remove directory %1$s +isisfish.error.rename.region=Can't rename region to %1$s +isisfish.error.save.checkSum.compilation=Can't save checkSum to compilation\: %1$s +isisfish.error.save.region= +isisfish.error.save.script.compilation=Can't save script to compilation\: %1$s +isisfish.error.save.simulation.parameters=Can't save simulation parameters in file %1$s +isisfish.error.script.create=isisfish.error.script.create +isisfish.error.script.delete=N'a pas pu supprimer le fichier %1$s pour la raison suivante %2$s +isisfish.error.script.import=N'a pas pu importer pour la raison suivante %1$s +isisfish.error.script.load=N'a pas pu charger le fichier %1$s pour la raison suivante %2$s +isisfish.error.script.save=N'a pas pu sauver le fichier %1$s pour la raison suivante %2$s +isisfish.error.sensitivity.parameter= +isisfish.error.simulation.log.openAppender=n'a pas pu ouvrir l'appender de la simulation %1$s pour la raison %2$s +isisfish.error.simulation.remote.global=Impossible de lancer une simulation sur serveur distant +isisfish.error.simulation.remote.wrongportvalue=Le port de connexion a une valeur incorrecte \: %s +isisfish.error.simulation.resultXml.close=Can't close simulation result XML for reason %1$s +isisfish.error.simulation.resultXml.open=Can't open simulation result XML for reason %1$s +isisfish.error.simulation.resultXml.write=Can't write simulation result XML for reason %1$s +isisfish.error.source.parameter=Can't get parameter from source +isisfish.error.strategy.order=Strategy %1$s don't have 12 StrategyMonthInfo but %2$s. Recreate them +isisfish.error.undefined.classes=pas de classes d\u00E9finies +isisfish.error.undefined.correspondence.zones.reproduction.recruitment=pas de correspondance entre les zones de reproduction et les zones de recrutement +isisfish.error.undefined.gear=l'engin n'est pas d\u00E9fini +isisfish.error.undefined.mesh=aucune maille de d\u00E9fini +isisfish.error.undefined.mesh.sector=aucune maille dans le secteur +isisfish.error.undefined.meta.population=aucune meta population de d\u00E9fini +isisfish.error.undefined.natural.death=pas de mortalit\u00E9 naturelle sur les classes naissantes +isisfish.error.undefined.sector=aucun secteur de d\u00E9fini +isisfish.error.undefined.stategy=aucune strat\u00E9gie de d\u00E9fini +isisfish.error.undefined.stategy.months=La strat\u00E9gie n'est pas d\u00E9finie pour certain mois +isisfish.error.undefined.zone.population=il n'y a pas de zone de population de d\u00E9finie +isisfish.error.undefined.zone.recruitment=il n'y a pas de zone de recrutement de d\u00E9finie +isisfish.error.undefined.zone.reproduction=il n'y a pas de zone de reproduction de d\u00E9finie +isisfish.error.unsupported.equation.langage=unsupported langage '%1$s' for equation\: %2$s +isisfish.error.wait.simThread=Can't wait SimThread +isisfish.error.warning.title=Attention +isisfish.error.write.simulation=Can't write information %1$s +isisfish.export.directory=Dossier d'export +isisfish.export.saved=Exports des r\u00E9sultats sauvegard\u00E9s +isisfish.export.title=Export des r\u00E9sultats +isisfish.factor.coefficient=Coefficient (en %) +isisfish.factor.comment=Commentaires +isisfish.factor.continue=Facteur continu +isisfish.factor.discret=Facteur discret +isisfish.factor.equation.variable.action=Action +isisfish.factor.equation.variable.coefficient=Coef (en %) +isisfish.factor.equation.variable.name=Nom +isisfish.factor.equation.variable.operator=Op\u00E9rateur +isisfish.factor.equation.variable.value=Valeur +isisfish.factor.factor=Facteur +isisfish.factor.factors=Facteurs +isisfish.factor.firstValue=Premi\u00E8re valeur +isisfish.factor.increment=Cardinalit\u00E9 +isisfish.factor.lastValue=Derni\u00E8re valeur +isisfish.factor.name=Nom du facteur +isisfish.factor.operateur=Op\u00E9rateur +isisfish.factor.selectDiscretNumber=Nombre de facteurs +isisfish.factor.title=Saisie d'un facteur +isisfish.factor.validDiscretNumber=Valider +isisfish.factor.value=Valeur +isisfish.filter=Filtrer +isisfish.filter.apply=Appliquer le filtre +isisfish.filter.cancel=Annuler +isisfish.filter.log.levelDebug=debug +isisfish.filter.log.levelError=erreur +isisfish.filter.log.levelFatal=fatal +isisfish.filter.log.levelInfo=info +isisfish.filter.log.levelTrace=trace +isisfish.filter.log.levelWarn=warning +isisfish.filter.log.tooltip.levelDebug=s\u00E9lectionner pour filtrer ce niveau +isisfish.filter.log.tooltip.levelError=s\u00E9lectionner pour filtrer ce niveau +isisfish.filter.log.tooltip.levelFatal=s\u00E9lectionner pour filtrer ce niveau +isisfish.filter.log.tooltip.levelInfo=s\u00E9lectionner pour filtrer ce niveau +isisfish.filter.log.tooltip.levelTrace=s\u00E9lectionner pour filtrer ce niveau +isisfish.filter.log.tooltip.levelWarn=s\u00E9lectionner pour filtrer ce niveau +isisfish.filter.log.tooltip.message=Entrer un terme \u00E0 rechercher et appuyer sur Entr\u00E9e +isisfish.filter.reset=R\u00E9initialiser +isisfish.filter.result=R\u00E9sultats +isisfish.filter.result.found=R\u00E9sultats (%d/%d) +isisfish.filter.select=S\u00E9lectionner +isisfish.filter.select.simulation=S\u00E9lectionner une simulation +isisfish.filter.simulation=Filtrer les simulations +isisfish.filter.simulation.analysePlanNumber=num\u00E9ro d'analyse +isisfish.filter.simulation.description=description +isisfish.filter.simulation.local=locale +isisfish.filter.simulation.numberOfYear=nombre d'ann\u00E9e(s) +isisfish.filter.simulation.regionName=nom de r\u00E9gion +isisfish.filter.simulation.simulationEnd=date de fin (dd/MM/yyyy) +isisfish.filter.simulation.simulationName=nom de simulation +isisfish.filter.simulation.simulationStart=date de d\u00E9but (dd/MM/yyyy) +isisfish.filter.simulation.simulatorName=nom du simulateur +isisfish.filter.simulation.tooltip.analysePlanNumber=filter sur le num\u00E9ro d'analyse (uniquement pour les simulations avec plan d'analyse) +isisfish.filter.simulation.tooltip.description=filtrer sur la description (format regex) +isisfish.filter.simulation.tooltip.local=filter uniquement les simulations locales +isisfish.filter.simulation.tooltip.numberOfYear=filter sur le nombre d'ann\u00E9e(s) (recherche extacte) +isisfish.filter.simulation.tooltip.regionName=filtrer sur le nom de la r\u00E9gion (format regex) +isisfish.filter.simulation.tooltip.simulationEnd=filtrer sur la date de fin de simulation (format dd/MM/yyyy) +isisfish.filter.simulation.tooltip.simulationName=filtrer sur le nom de simulation (format regex) +isisfish.filter.simulation.tooltip.simulationStart=filtrer sur la date de d\u00E9but de simulation (format dd/MM/yyyy) +isisfish.filter.simulation.tooltip.simulatorName=filter sur le nom du simulateur utilis\u00E9 (format regex) +isisfish.filter.simulation.tooltip.useAnalysePlan=filter uniquement les simulations avec plan d'analyse +isisfish.filter.simulation.tooltip.useOptimization=filter uniquement les simulations avec optimisation +isisfish.filter.simulation.tooltip.usePreScript=filter uniquement les simulations avec Prescript +isisfish.filter.simulation.tooltip.useStatistic=filter uniquement les simulations avec statistiques +isisfish.filter.simulation.useAnalysePlan=plan d'analyse +isisfish.filter.simulation.useOptimization=optimisation +isisfish.filter.simulation.usePreScript=prescript +isisfish.filter.simulation.useStatistic=statistiques +isisfish.fisheryRegion.addMap=Ajouter une carte +isisfish.fisheryRegion.area=Extr\u00E9mit\u00E9s de la zone de p\u00EAche +isisfish.fisheryRegion.comments=Commentaires +isisfish.fisheryRegion.delMap=Supprimer la carte +isisfish.fisheryRegion.latitude=Lat. +isisfish.fisheryRegion.latitude.max=Lat. max. +isisfish.fisheryRegion.latitude.min=Lat. min. +isisfish.fisheryRegion.longitude=Long. +isisfish.fisheryRegion.longitude.max=Long. max. +isisfish.fisheryRegion.longitude.min=Long. min. +isisfish.fisheryRegion.name=Nom de la r\u00E9gion +isisfish.fisheryRegion.ofCells=de mailles (option) +isisfish.fisheryRegion.selectFile=S\u00E9lectionnez un fichier +isisfish.fisheryRegion.spatial=R\u00E9solution spatiale +isisfish.gear.comments=Commentaires +isisfish.gear.effortUnit=Unit\u00E9 d'effort +isisfish.gear.name=Nom +isisfish.gear.rangeValues=Gamme de valeurs +isisfish.gear.standardisationFactor=Facteur de standardisation +isisfish.gear.technicalParameter=Param\u00E8tre technique +isisfish.gear.title=Engin +isisfish.graphBean.graph.render=Choisir un rendu de graphe +isisfish.graphBean.graphPanel=defaultToolTip-fr.ifremer.graph.GraphBean.graphPanel +isisfish.graphBean.graphRendererCombo=defaultToolTip-fr.ifremer.graph.GraphBean.graphRendererCombo +isisfish.graphBean.graphSplitPane=defaultToolTip-fr.ifremer.graph.GraphBean.graphSplitPane +isisfish.graphBean.label=defaultToolTip-fr.ifremer.graph.GraphBean.label1 +isisfish.graphBean.palettePanel=defaultToolTip-fr.ifremer.graph.GraphBean.palettePanel +isisfish.graphBean.scrolledwindow=defaultToolTip-fr.ifremer.graph.GraphBean.scrolledwindow1 +isisfish.graphBean.table=defaultToolTip-fr.ifremer.graph.GraphBean.table2 +isisfish.graphBean.table3=defaultToolTip-fr.ifremer.graph.GraphBean.table3 +isisfish.graphCombo.render.bar.horizontal=Rendu en barre horizontale +isisfish.graphCombo.render.bar.horizontal.stacked=Rendu en barre horizontale empil\u00E9e +isisfish.graphCombo.render.bar.vertical=Rendu en barre verticale +isisfish.graphCombo.render.bar.vertical.3d=Rendu en barre verticale 3D +isisfish.graphCombo.render.bar.vertical.stacked=Rendu en barre verticale empil\u00E9e +isisfish.graphCombo.render.line=Rendu en ligne +isisfish.graphCombo.render.min.max=Rendu en MinMax +isisfish.graphCombo.render.surface=Rendu en Aire +isisfish.infoItem..table=defaultToolTip-fr.ifremer.resultat.InfoItem.table29 +isisfish.infoItem.label=defaultToolTip-fr.ifremer.resultat.InfoItem.label +isisfish.infoItem.list=defaultToolTip-fr.ifremer.resultat.InfoItem.list +isisfish.infoItem.scrolledwindow=defaultToolTip-fr.ifremer.resultat.InfoItem.scrolledwindow1 +isisfish.infoItem.sum=defaultToolTip-fr.ifremer.resultat.InfoItemDate.sumButton +isisfish.infoItem.sum.year=Somme de \u00E9l\u00E9ment par ann\u00E9e +isisfish.infoItem.table=defaultToolTip-fr.ifremer.resultat.InfoItem.table30 +isisfish.input.continueCells=Continuer vers les mailles +isisfish.input.continueGears=Continuer vers les engins +isisfish.input.continueMetiers=Continuer vers les metiers +isisfish.input.continuePopulations=Continuer vers les populations +isisfish.input.continuePorts=Continuer vers les ports +isisfish.input.continueSetOfVessels=Continuer vers les ensembles de navires +isisfish.input.continueSpecies=Continuer vers les esp\u00E8ces +isisfish.input.continueStrategies=Continuer vers les strat\u00E9gies +isisfish.input.continueTripTypes=Continuer vers les types de trajets +isisfish.input.continueVesselTypes=Continuer vers les types de navires +isisfish.input.continueZones=Continuer vers les zones +isisfish.input.menu.addRegion=Ajouter une r\u00E9gion +isisfish.input.menu.commit=Sauvegarder les changements +isisfish.input.menu.copyRegion=Copier r\u00E9gion +isisfish.input.menu.exportRegion=Exporter la r\u00E9gion +isisfish.input.menu.importRegion=Importer une r\u00E9gion +isisfish.input.menu.importRegionSimulation=Importer la r\u00E9gion d'une simulation +isisfish.input.menu.importRegionV2=Importer une r\u00E9gion de la v2 d'IsisFish +isisfish.input.menu.importRenameRegion=Importer une r\u00E9gion et la renommer +isisfish.input.menu.removeLocaly=Supprimer localement +isisfish.input.menu.removeLocalyRemotely=Supprimer localement et \u00E0 distance +isisfish.input.menu.server=Serveur +isisfish.input.newRegion=Nouvelle r\u00E9gion +isisfish.input.selectRegion=S\u00E9lectionnez une r\u00E9gion +isisfish.input.title=Saisie de la p\u00EAcherie +isisfish.input.tree.cells=Mailles +isisfish.input.tree.gears=Engins +isisfish.input.tree.metiers=M\u00E9tiers +isisfish.input.tree.populations=Populations +isisfish.input.tree.ports=Ports +isisfish.input.tree.setofvessels=Flottilles +isisfish.input.tree.species=Esp\u00E8ces +isisfish.input.tree.strategies=Strat\u00E9gies +isisfish.input.tree.triptypes=Types de mar\u00E9e +isisfish.input.tree.vesseltypes=Types de navire +isisfish.input.tree.zones=Zones +isisfish.launch.anonymous=lecture seule +isisfish.launch.email=courriel +isisfish.launch.firstname=nom +isisfish.launch.init.done=init done in %1$s. +isisfish.launch.lasstname=pr\u00E9nom +isisfish.launch.server.authenticationMethod=droit d'acc\u00E8s au serveur +isisfish.launch.server.login=nom utilisateur +isisfish.launch.server.ssh.confirm.passphrase=confirmer la passphrase +isisfish.launch.server.ssh.key.change=Changer la clef ssh +isisfish.launch.server.ssh.key.generate=G\u00E9n\u00E9rer la clef ssh +isisfish.launch.server.ssh.no.passphrase=pas de passphrase +isisfish.launch.server.ssh.passphrase=passphrase +isisfish.launch.server.ssh.privateKeyFile=clef priv\u00E9e ssh +isisfish.launch.server.ssh.publicKeyFile=clef publique ssh +isisfish.launch.ssh=lecture-\u00E9criture (ssh) +isisfish.launch.stop=Arr\u00EAt de la simulation... +isisfish.launching=after init done in %1$s. +isisfish.log.addAppender=ajoute un appender [%1$s] +isisfish.log.body=Message \u00E0 joindre +isisfish.log.closeAppender=ferme l'appender [%1$s] pour la categorie %2$s +isisfish.log.mail.failed=Impossible d'envoyer le rapport par courriel. Le serveur smtp fonctionne ? (J'essaye de contacter < %1$s > smtp server) +isisfish.log.mail.send=Un rapport a \u00E9t\u00E9 envoy\u00E9 \u00E0 %1$s +isisfish.log.mail.send.title=Envoi de la simulation %1$s par email +isisfish.log.mailTo=Adresse du destinataire +isisfish.log.removeAppender=supprime l'appender [%1$s] +isisfish.log.restoreLogLevel=repositionne le niveau du logger %1$s du niveau %2$s au niveau %3$s +isisfish.log.sendAll=Envoyer la simulation complete +isisfish.log.sendMail=Envoyer par email +isisfish.log.simulation.name=IsisFish simulation %1$s +isisfish.log.swapLogLevel=permute le niveau du logger %1$s du niveau %2$s au niveau %3$s +isisfish.log.tooltip.body=Le message saisi sera joint au courriel envoy\u00E9 +isisfish.log.tooltip.mailTo=Entrer l'adresse du destinataire du courriel +isisfish.log.tooltip.sendAll=Envoyer toute la simulation, ou uniquement le fichier de log +isisfish.log.tooltip.sendMail=Cliquer pour envoyer le courriel contentant les fichiers +isisfish.message.add.objets.simulation=Ajout des nouveaux objets cr\u00E9\u00E9s durant la simulation +isisfish.message.backup.database.finished=backup database termin\u00E9 +isisfish.message.backup.database.progress=backup database en cours +isisfish.message.cancel.finished=Annulation termin\u00E9e +isisfish.message.check.finished=v\u00E9rification termin\u00E9e +isisfish.message.check.region= +isisfish.message.checking.cell= +isisfish.message.choose.archive=choose archive file or directory +isisfish.message.commit.cancelled=commit annul\u00E9 +isisfish.message.commit.finished=commit termin\u00E9 +isisfish.message.commit.region.canceled=Commit de la r\u00E9gion annul\u00E9 +isisfish.message.commiting.region=En train de commiter la r\u00E9gion %1$s ... +isisfish.message.compilation.time=Temps de compilation %1$ss +isisfish.message.confirm.delete.object=Voulez-vous vraiment supprimer l'objet %1$s +isisfish.message.confirm.remove.region=Voulez-vous vraiment supprimer la r\u00E9gion %1$s ? +isisfish.message.confirm.remove.script=Voulez-vous vraiment supprimer le script '%1$s' ? +isisfish.message.copy.finished=Copie termin\u00E9e +isisfish.message.copy.region=Copier la r\u00E9gion vers %1$s +isisfish.message.creating.region=En train de cr\u00E9er la r\u00E9gion %1$s +isisfish.message.creation.done=cr\u00E9ation termin\u00E9e %1$s +isisfish.message.creation.finished=Cr\u00E9ation termin\u00E9e +isisfish.message.delete.canceled=supression annul\u00E9e +isisfish.message.delete.entities=Supprimer les entit\u00E9s +isisfish.message.delete.entity=Supprimer l'entit\u00E9 +isisfish.message.delete.finished=Suppression termin\u00E9e +isisfish.message.delete.object=Pour supprimer l'objet %1$s, tous les objets suivants seront aussi supprim\u00E9s \n\n +isisfish.message.evaluation.finished=\u00E9valuation termin\u00E9e +isisfish.message.export.done=Export termin\u00E9 +isisfish.message.export.zip=Exporter dans le fichier zip %1$s +isisfish.message.file.overwrite=Le fichier existe, Voulez-vous l'\u00E9craser ? +isisfish.message.import=Importer %1$s +isisfish.message.import.equation.convert=Conversion manuelle de l'\u00E9quation +isisfish.message.import.finished=Import termin\u00E9 +isisfish.message.import.region.name=Entre le nom de la r\u00E9egion \u00E0 importer +isisfish.message.import.region.xml=R\u00E9gion XML (Isis-Fish V2.x) +isisfish.message.import.region.zipped=Zipped Region +isisfish.message.import.scripts.file.cancelled=Importation des scripts annul\u00E9 +isisfish.message.import.xml.v2.file=Import xml v2 file +isisfish.message.import.zip=Import zip file +isisfish.message.launchui.notlaunch= +isisfish.message.load.finished=Chargement termin\u00E9 +isisfish.message.load.map=Chargement de la carte \: %1$s (%2$s, %3$s) +isisfish.message.loading.old.simulation=Chargement d'une ancienne simulation ... +isisfish.message.loading.region=Chargement de la r\u00E9gion +isisfish.message.name.imported.region=Entrez le nom de la r\u00E9gion \u00E0 importer +isisfish.message.new.filename=Entrez le nom du nouveau du fichier.\n\t (utiliser uniquemment des caract\u00E8res et _ en commencant avec une majuscule) +isisfish.message.new.formule.category=Choisissez le cat\u00E9gorie de la formule +isisfish.message.new.formule.title=Nouvelle formule +isisfish.message.new.region.name=Entrer le nom de la nouvell r\u00E9gion +isisfish.message.old.simulation.loaded=Ancienne simulation charg\u00E9e +isisfish.message.page.modified=Cette page a \u00E9t\u00E9 modifi\u00E9, voulez-vous la sauvegarder ? +isisfish.message.presimulation.script.execution=Ex\u00E9cution des scripts de Presimulation +isisfish.message.recruitment.number.month=Entrez le nombre de mois de recrutement +isisfish.message.region.commited=R\u00E9gion commit\u00E9e +isisfish.message.region.loaded=R\u00E9gion charg\u00E9e +isisfish.message.region.remove.canceled=Suppression de r\u00E9gion annul\u00E9 +isisfish.message.region.removed=R\u00E9gion supprim\u00E9e +isisfish.message.remove.canceled=Suppression annul\u00E9e +isisfish.message.remove.finished=Suppresison termin\u00E9 +isisfish.message.removing.region=Suppression de la r\u00E9gion %1$s ... +isisfish.message.result.verif.region=R\u00E9sultat de la v\u00E9rification de la r\u00E9gion +isisfish.message.save.finished=Sauvegarde termin\u00E9e +isisfish.message.saveModel.finished=Sauvegarde du mod\u00E8le termin\u00E9e +isisfish.message.script.commit=Indiquez vos modifications +isisfish.message.setting.cache.aspects=Mise en place des aspects Cache +isisfish.message.setting.trace.aspects=Mise en place des aspects Trace +isisfish.message.simulation.after=Export des r\u00E9sultats +isisfish.message.simulation.ended=Simulation termin\u00E9e +isisfish.message.simulation.execution=Simulation execution +isisfish.message.simulation.prepare=Pr\u00E9paration de la simulation +isisfish.message.tray.disabled=Icone de notification d\u00E9sactiv\u00E9e +isisfish.message.update.finished=Mise \u00E0 jour termin\u00E9e +isisfish.metier.comments=Commentaires +isisfish.metier.name=Nom +isisfish.metier.rangeValues=Param\u00E8tre d'engin +isisfish.metier.title=M\u00E9tier +isisfish.metierMonitor.metiers=M\u00E9tiers +isisfish.metierMonitor.strategies=Strat\u00E9gies +isisfish.metierSeasonInfo.toString=%1$s saison %2$s-%3$s +isisfish.metierSeasonInfoSpecies.mainSpecies=Esp\u00E8ces principales pour le m\u00E9tier +isisfish.metierSeasonInfoSpecies.selectSeason=S\u00E9lectionnez une saison +isisfish.metierSeasonInfoSpecies.selectSpecies=Choix de l'esp\u00E8ce +isisfish.metierSeasonInfoSpecies.species=Esp\u00E8ce +isisfish.metierSeasonInfoSpecies.targetFactor=Facteur cible +isisfish.metierSeasonInfoSpecies.title=Esp\u00E8ces capturables +isisfish.metierSeasonInfoZone.comments=Commentaires +isisfish.metierSeasonInfoZone.season=Saison +isisfish.metierSeasonInfoZone.selectSeason=S\u00E9lectionnez une saison +isisfish.metierSeasonInfoZone.title=Saison / Zones +isisfish.monitor.title=Moniteur de l'application +isisfish.month.april=avril +isisfish.month.august=ao\u00FBt +isisfish.month.december=d\u00E9cembre +isisfish.month.february=f\u00E9vrier +isisfish.month.january=janvier +isisfish.month.july=juillet +isisfish.month.june=juin +isisfish.month.march=mars +isisfish.month.may=mai +isisfish.month.november=novembre +isisfish.month.october=octobre +isisfish.month.september=septembre +isisfish.params.changeLogLev=Passe du niveau '%1$s' au niveau '%2$s' +isisfish.params.clearFilter=Remise \u00E0 z\u00E9ro du filtre +isisfish.params.description=Description +isisfish.params.filter=Filtrer +isisfish.params.lblLauncher=Lanceur de simulation +isisfish.params.loadOldSimulation=Charger une ancienne simulation +isisfish.params.numberYear=Nombre d'ann\u00E9es +isisfish.params.onlyExportSimulation=Exporter uniquement des simulations +isisfish.params.populationNumbers=Donn\u00E9es de population +isisfish.params.ruleParameters=Param\u00E8tres des r\u00E8gles +isisfish.params.sensitivityName=Nom de l'analyse de sensibilit\u00E9 +isisfish.params.simulationName=Nom de la simulation +isisfish.params.title=Param\u00E8tres +isisfish.params.toString.fishery=P\u00EAcherie\: %1$s\n\n +isisfish.params.toString.lib.logger.level=niveau du logger de librairies %1$s +isisfish.params.toString.number.years=Nombre d'ann\u00E9s \: %1$s\n\n +isisfish.params.toString.plan=Plan\: %1$s +isisfish.params.toString.plan.number=Analyse plan sequence number\: %1$s\n\n +isisfish.params.toString.populations=Populations\: +isisfish.params.toString.rule=Rule\: %1$s +isisfish.params.toString.script.logger.level=niveau du logger de scripts %1$s +isisfish.params.toString.script.presimulation=Script de presimulation +isisfish.params.toString.simul.logger.level=niveau du logger de simulateur %1$s +isisfish.params.toString.simulation.done=Simulation r\u00E9alis\u00E9e avec %1$s\: +isisfish.params.toString.strategies=Strat\u00E9gies d'exploitation\: +isisfish.params.useAnalysePlan=Utiliser le plan de simulation +isisfish.params.usePreSimulationScript=Utiliser un script de pr\u00E9-simulation +isisfish.population.capturability=Capturabilit\u0E009e +isisfish.population.comments=Commentaires +isisfish.population.group=Groupe +isisfish.population.groups=Groupes +isisfish.population.mappingZoneReproZoneRecru=MappingZoneReproZoneRecru +isisfish.population.matrixAbundance=Matrice d'abondance +isisfish.population.matrixAbundance1D=matrixAbundance1D +isisfish.population.recruitment=Recrutement +isisfish.population.reproduction=Reproduction +isisfish.population.season=Saison +isisfish.population.zones=Zones +isisfish.populationBasics.geographicID=Identifiant g\u00E9ographique +isisfish.populationBasics.growth=Croissance +isisfish.populationBasics.growthReverse=Croissance inverse +isisfish.populationBasics.maturityGroup=Groupe de maturit\u00E9 +isisfish.populationBasics.name=Nom +isisfish.populationBasics.numberGroup=Nombre de groupes +isisfish.populationBasics.plusGroup=Groupe plus +isisfish.populationBasics.recreateClasses=Reconstruire les groupes +isisfish.populationBasics.title=Saisie des populations +isisfish.populationCapturability.comments=Commentaires +isisfish.populationCapturability.selectCoefficient=S\u00E9lectionnez un coefficient par saison et par classe +isisfish.populationCapturability.title=Saisie de la capturabilit\u00E9 +isisfish.populationEquation.meanWeight=Poids moyen +isisfish.populationEquation.naturalDeathRate=Taux de mortalit\u00E9 naturelle +isisfish.populationEquation.price=Prix +isisfish.populationEquation.title=Saisie des \u00E9quations +isisfish.populationGroup.age=Age +isisfish.populationGroup.comments=Commentaires +isisfish.populationGroup.length=Longueur +isisfish.populationGroup.maximumLength=Longueur maximale +isisfish.populationGroup.meanWeigth=Poids principal +isisfish.populationGroup.minimumLength=Longueur minimale +isisfish.populationGroup.naturalDeathRate=Taux de mortalit\u00E9 naturelle +isisfish.populationGroup.price=Prix +isisfish.populationGroup.reproductionRate=Taux de reproduction +isisfish.populationGroup.title=Saisie des groupes de population +isisfish.populationGroup.toString=%1$s Groupe %2$s +isisfish.populationMigration.comments=Commentaires +isisfish.populationMigration.selectSeason=S\u00E9lectionnez une saison +isisfish.populationMigration.title=Migration +isisfish.populationMigration.useEquation=Utiliser l'\u00E9quation +isisfish.populationMigrationEmigration.coefficient=Coefficient +isisfish.populationMigrationEmigration.departureZone=Zone de d\u00E9part +isisfish.populationMigrationEmigration.title=Migration +isisfish.populationMigrationImmigration.arrivalZone=Zone d'arriv\u00E9e +isisfish.populationMigrationImmigration.coefficient=Coefficient +isisfish.populationMigrationImmigration.title=Immigration +isisfish.populationMigrationMigration.arrivalZone=Zone d'arriv\u00E9e +isisfish.populationMigrationMigration.coefficient=Coefficient +isisfish.populationMigrationMigration.departureZone=Zone de d\u00E9part +isisfish.populationMigrationMigration.title=Migration de population +isisfish.populationRecruitment.comments=Commentaires +isisfish.populationRecruitment.monthgapgetweenreprorecruitment=Nombre de mois entre ponte et recrutement +isisfish.populationRecruitment.recruitmentDistribution=Distribution du recrutement +isisfish.populationRecruitment.reproductionEquation=Equation de reproduction +isisfish.populationRecruitment.title=Saisie des reproductions +isisfish.populationSeasonInfo.arrival=Arriv\u00E9e +isisfish.populationSeasonInfo.departure=D\u00E9part +isisfish.populationSeasonInfo.distributionSpawing=Distribution de la reproduction +isisfish.populationSeasonInfo.emigration=Emigration +isisfish.populationSeasonInfo.group=Groupe +isisfish.populationSeasonInfo.immigration=Immigration +isisfish.populationSeasonInfo.migration=Migration +isisfish.populationSeasonInfo.months=Mois +isisfish.populationSeasonInfo.toString=%1$s saison %2$s-%3$s +isisfish.populationSeasons.Reproduction=Reproduction +isisfish.populationSeasons.changeGroup=Changement de groupe +isisfish.populationSeasons.comments=Commentaires +isisfish.populationSeasons.computeCoefficient=Calculer le coefficient +isisfish.populationSeasons.distributionSpawning=Distribution de la reproduction +isisfish.populationSeasons.noSpacialized=Non spatialis\u00E9 +isisfish.populationSeasons.selectSeason=S\u00E9lectionnez une saison +isisfish.populationSeasons.showSpacialized=Voir les coefficients spatialis\u00E9s +isisfish.populationSeasons.spacialized=spatialis\u00E9 +isisfish.populationSeasons.spacialized.visualisation=Coefficients spatialis\u00E9s +isisfish.populationSeasons.title=Saisons +isisfish.populationZones.betweenSpawningRecruitmentAreas=Correspondance entre les zones de reproduction et de recrutement +isisfish.populationZones.selectPopulationAreas=S\u00E9lectionnez les zones des populations +isisfish.populationZones.selectRecruitmentAreas=S\u00E9lectionnez les zones de recrutement +isisfish.populationZones.selectSpawningAreas=S\u00E9lectionnez les zones de reproduction +isisfish.populationZones.title=Zones +isisfish.port.cell=Maille du port +isisfish.port.comments=Commentaires +isisfish.port.name=Nom +isisfish.preScript.backParameter=Retour aux param\u00E8tres +isisfish.preScript.title=Script de pr\u00E9-simulation +isisfish.queue.clearDone=Retirer les simulations termin\u00E9es +isisfish.queue.id=Identifiant +isisfish.queue.launcher=Lanceur de simulation +isisfish.queue.masterplan=Plan de simulation +isisfish.queue.notstarted=Non d\u00E9marr\u00E9 +isisfish.queue.plan=Plan +isisfish.queue.progression=Progression +isisfish.queue.restartSimulation=Red\u00E9marrer +isisfish.queue.showLog=Voir les logs de la simulation +isisfish.queue.simulationLaunch=Lanceur de la queue des simulations +isisfish.queue.status=\u00C9tat +isisfish.queue.stopSimulation=Arr\u00EAter la simulation +isisfish.queue.title=Queue +isisfish.result.abundance=Abondance +isisfish.result.add=Ajouter un r\u00E9sultat +isisfish.result.begin.simulation=En d\u00E9but de simulation\: +isisfish.result.capture=Capturer +isisfish.result.capture.metier=Capturer par m\u00E9tier +isisfish.result.choose.simulation=Choisir une simulation +isisfish.result.datas=Donn\u00E9es +isisfish.result.datasRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.donneeRadioButton +isisfish.result.desktopPane=defaultToolTip-fr.ifremer.resultat.ResultatView.desktopPane +isisfish.result.dimension=Dimension +isisfish.result.end.simulation=En fin de Simulation\: +isisfish.result.export=Export +isisfish.result.export.file=Exporter un fichier texte +isisfish.result.file=Fichier +isisfish.result.graph=Graphe +isisfish.result.graphRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.graphRadioButton +isisfish.result.hpaned=defaultToolTip-fr.ifremer.resultat.ResultatEdit.hpaned2 +isisfish.result.infoPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.infoPanel +isisfish.result.label=defaultToolTip-fr.ifremer.resultat.ResultatView.label9 +isisfish.result.map=Carte +isisfish.result.mapRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.mapRadioButton +isisfish.result.menuExport=defaultToolTip-fr.ifremer.resultat.ResultatEdit.menuExport +isisfish.result.menubar=defaultToolTip-fr.ifremer.resultat.ResultatView.menubar1 +isisfish.result.menuitem=defaultToolTip-fr.ifremer.resultat.ResultatView.menuitem2 +isisfish.result.new.window=Ouvrir une nouvelle fen\u00EAtre +isisfish.result.openWindowButton=defaultToolTip-fr.ifremer.resultat.ResultatView.openWindowButton +isisfish.result.quit=Quitter +isisfish.result.reject.metier=Rejet par metier +isisfish.result.remove.simulation=Supprimer Simulation +isisfish.result.removeSimulationButton=defaultToolTip-fr.ifremer.resultat.ResultatView.supprimerSimulationButton +isisfish.result.resultat=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resultat +isisfish.result.scroll=defaultToolTip-fr.ifremer.resultat.ResultatEdit.scroll +isisfish.result.show.simulation.log=Voir les logs +isisfish.result.simulation=defaultToolTip-fr.ifremer.resultat.ResultatView.simulation +isisfish.result.statusBar=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusbar1 +isisfish.result.statusImage=defaultToolTip-fr.ifremer.resultat.ResultatEdit.statusImage +isisfish.result.stress.metier=Effort par metier +isisfish.result.summary=R\u00E9sum\u00E9 +isisfish.result.summaryRadioButton=defaultToolTip-fr.ifremer.resultat.ResultatEdit.resumeRadioButton +isisfish.result.table=defaultToolTip-fr.ifremer.resultat.ResultatView.table33 +isisfish.result.title=R\u00E9sultat +isisfish.result.tooltip.show.simulation.log=Cliquer pour afficher la console des logs de la simulation +isisfish.result.unload.metier=Debarquement par metier +isisfish.result.vbox=defaultToolTip-fr.ifremer.resultat.ResultatView.vbox1 +isisfish.result.viewPanel=defaultToolTip-fr.ifremer.resultat.ResultatEdit.viewPanel +isisfish.resultChoice.save=R\u00E9sultats \u00E0 sauvegarder +isisfish.resultChoice.saved=R\u00E9sultats sauvegard\u00E9 +isisfish.resultChoice.title=Choix de r\u00E9sultats +isisfish.resume.matrixInfoGrid=defaultToolTip-fr.ifremer.resultat.ResumePanel.matriceInfoGrid +isisfish.resume.resumeTextArea=defaultToolTip-fr.ifremer.resultat.ResumePanel.resumeTextArea +isisfish.resume.scrolledwindow=defaultToolTip-fr.ifremer.resultat.ResumePanel.scrolledwindow2 +isisfish.resume.table=defaultToolTip-fr.ifremer.resultat.ResumePanel.table1 +isisfish.script.check=V\u00E9rifier +isisfish.script.commit=Commit +isisfish.script.compilation.failed=%s +isisfish.script.compilation.ok=Compilation r\u00E9ussie.\n--------------------\n\n%s +isisfish.script.copy=Copier +isisfish.script.cut=Couper +isisfish.script.evaluate=\u00C9valuer +isisfish.script.export=Exporter des scripts dans une archive zip +isisfish.script.export.cancel=annuler +isisfish.script.export.checkAll=Tout (d\u00E9-)s\u00E9lectionner +isisfish.script.export.chooseDir=... +isisfish.script.export.ok=exporter +isisfish.script.export.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les scripts \u00E0 exporter +isisfish.script.export.tooltip.chooseDir=Choisir le r\u00E9pertoire o\u00F9 exporter les scripts +isisfish.script.import=Importer des scripts depuis une archive zip +isisfish.script.import.cancel=annuler +isisfish.script.import.checkAll=Tout (d\u00E9-)s\u00E9lectionner +isisfish.script.import.labelAdd=Le(s) fichier(s) suivant(s) sera(ont) ajout\u00E9(s), Confirmer l'ajout +isisfish.script.import.labelOverwrite=Le(s) fichier(s) suivant(s) existe(nt) d\u00E9j\u00E0, Confirmer pour l'\u00E9crasement +isisfish.script.import.ok=importer +isisfish.script.import.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les scripts \u00E0 importer +isisfish.script.menu.checkSyntax=V\u00E9rifier la syntaxe +isisfish.script.menu.code=Code +isisfish.script.menu.commit=Commiter des scripts sur le serveur +isisfish.script.menu.copy=Copier +isisfish.script.menu.cut=Couper +isisfish.script.menu.deleteLocaly=Supprimer localement +isisfish.script.menu.deleteLocalyServer=Supprimer localement et sur le serveur +isisfish.script.menu.diff=Voir les diff\u00E9rences avec la version du serveur +isisfish.script.menu.edit=\u00C9dition +isisfish.script.menu.evaluate=Evaluer +isisfish.script.menu.file=Fichier +isisfish.script.menu.new=Nouveau +isisfish.script.menu.paste=Coller +isisfish.script.menu.save=Sauver +isisfish.script.menu.txtExport=Exporter +isisfish.script.menu.txtImport=Importer +isisfish.script.menu.txtNewAnalysePlan=Nouveau plan d'analyse +isisfish.script.menu.txtNewEquationModel=Nouvelle formule +isisfish.script.menu.txtNewExport=Nouveau script d'export +isisfish.script.menu.txtNewRule=Nouvelle r\u00E8gle +isisfish.script.menu.txtNewScript=Nouveau script +isisfish.script.menu.txtNewSensitivity=Nouveau calculateur de sensibilit\u00E9 +isisfish.script.menu.txtNewSimulator=Nouveau simulateur +isisfish.script.menu.txtVCS=Serveur +isisfish.script.menu.update=Synchronisation +isisfish.script.new=Nouveau +isisfish.script.paste=Coller +isisfish.script.save=Sauver +isisfish.script.title=Editeur de scripts +isisfish.script.txtExport=Exporter +isisfish.season.toString=saison %1$s-%2$s +isisfish.selectivity.equation=Equation +isisfish.selectivity.selectPopulation=S\u00E9lectionnez une population +isisfish.selectivity.title=S\u00E9lectivit\u00E9 +isisfish.sens.backParameter=Retour aux param\u00E8tres +isisfish.sens.title=Plan de simulation +isisfish.sensitivity.displaysecondpass=Afficher les r\u00E9sultats +isisfish.sensitivity.export=Export +isisfish.sensitivity.secondpass=Analyse des r\u00E9sultats +isisfish.sensitivity.secondpass.title=Analyse des r\u00E9sultats +isisfish.sensitivity.select=M\u00E9thode +isisfish.sensitivity.title=Analyse de sensibilit\u00E9 +isisfish.sensitivityChooser.title=M\u00E9thode de la sensibilit\u00E9 +isisfish.server.ssh.generateKey.title=G\u00E9n\u00E9rer une cl\u00E9 SSH +isisfish.setOfVessels.comments=Commentaires +isisfish.setOfVessels.fixedCosts=Co\u00FBts fixes +isisfish.setOfVessels.name=Nom +isisfish.setOfVessels.numberOfVessels=Nombre de navires +isisfish.setOfVessels.technicalEfficiency=\u00C9fficacit\u00E9 technique +isisfish.setOfVessels.title=Caract\u00E9ristiques +isisfish.setOfVessels.vesselType=Type de navire +isisfish.simpleResult.legendPanel=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.legendPanel +isisfish.simpleResult.more.information=Cliquer sur une cellule pour plus d'informations... +isisfish.simpleResult.resultatMap=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMap +isisfish.simpleResult.resultatMapToolBar=defaultToolTip-fr.ifremer.isisfish.map.SimpleIsisMapBeanBean.resultatMapToolBar +isisfish.simpleResult.table=defaultToolTip-fr.ifremer.isisfish.map.SimpleResultatMapBean.table12 +isisfish.simulation.log.console.title=Console de log simulation '%1$s' +isisfish.simulation.log.showConsole=affichage de la console de log pour la simulation %1$s +isisfish.simulation.menu.import=Restaurer les param\u00E9tres d'une simulation +isisfish.simulation.menu.save=Sauver les param\u00E8tres de la simulation +isisfish.simulation.menu.simulation=Simulation +isisfish.simulation.name=Nom de la simulation +isisfish.simulation.remote.message.connection=Connexion \u00E0 Caparmor +isisfish.simulation.remote.message.downloadresults=T\u00E9l\u00E9chargement des r\u00E9sultats +isisfish.simulation.remote.message.upload=Upload de la simulation +isisfish.simulation.remote.message.waitingavailable=Attente d'une place de simulation +isisfish.simulation.remote.message.waitingstart=Attente du d\u00E9marrage de la simulation +isisfish.simulation.restarting=Red\u00E9marrage... +isisfish.simulation.title=Lanceur de simulation +isisfish.simulator.launcher.inprocess=dans le m\u00EAme processus +isisfish.simulator.launcher.remote=sur le serveur Caparmor +isisfish.simulator.launcher.subprocess=dans un sous processus +isisfish.simulator.simulaction.badid=Impossible de lancer la simulation '%s' \: l'identifiant existe d\u00E9j\u00E0 \! +isisfish.simulator.ssh.configuration.connecting=Connexion en cours +isisfish.simulator.ssh.configuration.connectingpk=Connexion en cours (avec cl\u00E9 publique) +isisfish.simulator.ssh.configuration.connection=Information de connexion +isisfish.simulator.ssh.configuration.connectionerror=Connexion impossible (%s) +isisfish.simulator.ssh.configuration.connectionok=Connect\u00E9 avec succ\u00E8s +isisfish.simulator.ssh.configuration.environment=Configuration sur Caparmor +isisfish.simulator.ssh.configuration.invalidpassphrase=Passphrase invalide +isisfish.simulator.ssh.configuration.keygenerate=G\u00E9n\u00E9rer +isisfish.simulator.ssh.configuration.test=Tester la configuration +isisfish.simulator.ssh.configuration.title=Configuration du lanceur Caparmor +isisfish.simulator.subprocess.readoutput.error= +isisfish.species.age=Age +isisfish.species.cee=CEE +isisfish.species.comments=Commentaires +isisfish.species.length=Longueur +isisfish.species.name=Nom des esp\u00E8ces +isisfish.species.rubbinCode=Code Rubbin +isisfish.species.scientificName=Nom scientifique +isisfish.species.structured=Structur\u00E9 +isisfish.ssh.askpassphrase.message=Entrez la passphrase pour la cl\u00E9 '%s' \: +isisfish.ssh.askpassphrase.title=D\u00E9verrouillage de cl\u00E9 SSH +isisfish.ssh.askpassphrase.wrongpassphrase=Mauvaise cl\u00E9, entrez une nouvelle passphrase '%s' \: +isisfish.strategy.comments=Commentaires +isisfish.strategy.inactivity=Equation d'inactivit\u00E9 +isisfish.strategy.inactivityEquationUsed=Utiliser une \u00E9quation d'inactivit\u00E9 +isisfish.strategy.name=Nom +isisfish.strategy.proportionSetOfVessels=Proportion des ensembles de navires +isisfish.strategy.title=Caract\u00E9ristiques +isisfish.strategyMonthInfo.metier=M\u00E9tier +isisfish.strategyMonthInfo.minInactivityDays=Jour minimums d'inactivit\u00E9 +isisfish.strategyMonthInfo.numberOfTrips=Nombre de trajets +isisfish.strategyMonthInfo.proportion=Proportion +isisfish.strategyMonthInfo.title=Saisie des mois +isisfish.strategyMonthInfo.toString=%1$s %2$s +isisfish.timeUnit.day=Jour +isisfish.timeUnit.hours=Heures +isisfish.tray.simulation=Isis-fish - %1$s \: %2$s/%3$s +isisfish.tray.simulation.no=Isis-fish - Pas de simulation +isisfish.tripType.comments=Commentaires +isisfish.tripType.duration=Dur\u00E9e +isisfish.tripType.minTime=Temps minimal entre deux voyages +isisfish.tripType.name=Nom +isisfish.vcs.ask.passphrase=Entrez votre passe phrase (si votre clef ssh en contient une). +isisfish.vcs.ask.passphrase.title=Demande de passe phrase +isisfish.vcs.commit=Message de sauvegarde +isisfish.vcs.commit.cancel=annuler +isisfish.vcs.commit.label=Entrer quelques mots concernant la modification des scripts +isisfish.vcs.commit.ok=confirmer +isisfish.vcs.init.notfoundcantdownload=La base de donn\u00E9es pour la version %s n'a ni pu \u00EAtre trouv\u00E9e, ni t\u00E9l\u00E9charg\u00E9e.\nVous devez la t\u00E9l\u00E9charger manullement \u00E0 partir du site d'Isis-Fish. +isisfish.vcs.init.wrongprotocol=Votre base de donn\u00E9es locale \: %s n'utilise pas un protocole correct.\nVoulez-vous faire une sauvegarde de cette base et r\u00E9cup\u00E9rer une meilleure version ? +isisfish.vcs.switchprotocol.confirm=Le protocole d'acc\u00E8s au d\u00E9p\u00F4t des scripts a chang\u00E9.\nVoulez-vous changer vers le nouveau d\u00E9p\u00F4t ? +isisfish.vcs.switchtag.warningconflict=Votre base de donn\u00E9es a \u00E9t\u00E9 mise \u00E0 jour mais les fichiers suivants sont en conflit, merci de les v\u00E9rifier \: +isisfish.vcs.switchversion.confirm=Vous n'utilisez pas le d\u00E9p\u00F4t correct pour votre version d'Isis-Fish \: %s.\nVoulez-vous changer de d\u00E9p\u00F4t ? +isisfish.vcs.update=R\u00E9sultats de la synchronisation avec le serveur +isisfish.vcs.update.cancel=annuler +isisfish.vcs.update.checkAll=(de)-select tout +isisfish.vcs.update.local=Systeme local +isisfish.vcs.update.local.modified=Fichiers modifi\u00E9s +isisfish.vcs.update.local.outofdateAndModified=Fichiers localement modifi\u00E9s en conflit avec le serveur +isisfish.vcs.update.local.tooltip.modified=Fichiers localement modifi\u00E9s \n(confirmer pour revenir \u00E0 la version avant modification ou soum\u00EAtre au serveur) +isisfish.vcs.update.local.tooltip.outofdateAndModified=Fichiers localement modifi\u00E9s mais ayant une version plus r\u00E9cente sur le serveur\n (confirmer pour revenir \u00E0 la version avant modification ou r\u00E9cup\u00E9rer la nouvelle version du serveur) +isisfish.vcs.update.local.tooltip.unversionned=Fichiers uniquement pr\u00E9sents sur votre systeme \n(confirmer pour les enregister sur le serveur) +isisfish.vcs.update.local.unversionned=Nouveaux fichiers +isisfish.vcs.update.ok=continuer +isisfish.vcs.update.remote=Serveur distant +isisfish.vcs.update.remote.missing=Nouveaux fichiers +isisfish.vcs.update.remote.outofdate=Fichiers plus r\u00E9cents sur le serveur +isisfish.vcs.update.remote.tooltip.missing=Nouveaux fichiers uniquement pr\u00E9sents sur le serveur \n(confirmer pour les r\u00E9cup\u00E9rer) +isisfish.vcs.update.remote.tooltip.outofdate=Fichiers dont il existe une version plus r\u00E9cente sur le serveur \n(confirmer pour les r\u00E9cup\u00E9rer) +isisfish.vcs.update.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les fichiers (\u00E0 action unique) que vous voulez traiter +isisfish.vcs.update.tooltip.local=vcs.update.tooltip.local +isisfish.vcs.update.tooltip.remote=vcs.update.tooltip.remote +isisfish.vcs.update.warningconflict=Votre base de donn\u00E9es a \u00E9t\u00E9 mise \u00E0 jour\nmais les fichiers suivants sont en conflit, merci de les v\u00E9rifier \:\n +isisfish.vcs.updateconfirm=Confirmation des ope\u00E9rations de synchronisation avec le serveur +isisfish.vcs.updateconfirm.cancel=annuler +isisfish.vcs.updateconfirm.checkAll=(de)-select tout +isisfish.vcs.updateconfirm.label=Confirmer les op\u00E9rations qui pourraient \u00E9craser vos fichiers +isisfish.vcs.updateconfirm.label2='Etes vous sur de vouloir effectuer ces op\u00E9rations ?' +isisfish.vcs.updateconfirm.ok=confirmer +isisfish.vcs.updateconfirm.tooltip.checkAll=(D\u00E9-)S\u00E9lectionner tous les scripts que vous voulez traiter +isisfish.vcs.updaterepository.confirm=Votre d\u00E9p\u00F4t des scripts n'est pas \u00E0 jour. Voulez-vous mettre \u00E0 jour les fichiers suivants ? +isisfish.vcs.vcssvn.add.error=Impossible d'ajouter un fichier +isisfish.vcs.vcssvn.add.errorreadonly=Vous ne pouver pas ajouter de fichier, ce d\u00E9p\u00F4t est en lecture seule \! +isisfish.vcs.vcssvn.checkProtocol.error=Impossible d'obtenir l'adresse correspondant au d\u00E9p\u00F4t local +isisfish.vcs.vcssvn.checkProtocol.relocate=Transfert du d\u00E9p\u00F4t %s de %s vers %s +isisfish.vcs.vcssvn.checkout.error=Impossible de mettre \u00E0 jour +isisfish.vcs.vcssvn.cleanup.error=Impossible de d\u00E9verrouiller la copie locale +isisfish.vcs.vcssvn.commit.error=Impossible de commiter +isisfish.vcs.vcssvn.commit.errorreadonly=Vous ne pouvez pas commiter, le d\u00E9p\u00F4t est en lecture seule +isisfish.vcs.vcssvn.delete.error=Impossible de supprimer des fichiers +isisfish.vcs.vcssvn.delete.errorreadonly=Vous ne pouvez pas supprimer ce fichier, le d\u00E9p\u00F4t est en lecture seule +isisfish.vcs.vcssvn.diff.error=Impossible d'obtenir le diff +isisfish.vcs.vcssvn.gettag.error=Erreur lors de la r\u00E9cup\u00E9ration de l'adresse du d\u00E9p\u00F4t local +isisfish.vcs.vcssvn.getupdate.error=Impossible d'obtenir le statut des fichiers +isisfish.vcs.vcssvn.global.filelocalandremotestatus=Le statut du fichier %s est (l\:%s/d\:%s) +isisfish.vcs.vcssvn.global.filestatus=Le statut de %s est %s +isisfish.vcs.vcssvn.global.foundUpdatedFile=Ajout de %s comme fichier mis \u00E0 jour +isisfish.vcs.vcssvn.global.torevision=\u00C0 la r\u00E9vision \: %d +isisfish.vcs.vcssvn.isconnected.switchoff=Impossible de se connecter au serveur, passage en mode d\u00E9connect\u00E9 \: %s +isisfish.vcs.vcssvn.isconnected.switchto=Connexion au serveur disponible, passage en mode connect\u00E9 \: %s +isisfish.vcs.vcssvn.isonremote.error=Le fichier %s n'est pas sur le serveur +isisfish.vcs.vcssvn.istag.notexist=Le tag %s n'existe pas +isisfish.vcs.vcssvn.isuptodate.error=Impossible d'obtenir le statut de fichier +isisfish.vcs.vcssvn.list.error=Impossible de lister +isisfish.vcs.vcssvn.localstatus.error=Impossible d'obtenir le statut local de fichier +isisfish.vcs.vcssvn.remotestatus.error=Impossible d'obtenir le statut distant de fichier +isisfish.vcs.vcssvn.setTag.error=Erreur lors de la r\u00E9cup\u00E9ration de l'adresse du d\u00E9p\u00F4t local +isisfish.vcs.vcssvn.settag.switchfromto=Switch du tag du d\u00E9p\u00F4t de %s \u00E0 %s +isisfish.vcs.vcssvn.update.error=Impossible de mettre \u00E0 jour +isisfish.vcs.vcssvn.update.notinlocal=Impossible de mettre \u00E0 jour des fichiers qui ne sont pas pas dans le d\u00E9p\u00F4t +isisfish.versionStorage.removed=Supprim\u00E9 +isisfish.vesselType.activityRange=Intervalle d'activit\u00E9 +isisfish.vesselType.comments=Commentaires +isisfish.vesselType.fuelCost=Co\u00FBt d'un trajet en fuel +isisfish.vesselType.length=Longueur +isisfish.vesselType.maxDuration=Dur\u00E9e maximale du trajet +isisfish.vesselType.miniCrew=Taille minimale d'\u00E9quipage +isisfish.vesselType.name=Nom +isisfish.vesselType.speed=Vitesse +isisfish.welcome.menu.about=\u00C0 propos +isisfish.welcome.menu.api=API +isisfish.welcome.menu.close=Fermer +isisfish.welcome.menu.configuration=Configuration +isisfish.welcome.menu.configuration.sshlauncher=Configuration Caparmor +isisfish.welcome.menu.configuration.vcs=Configuration vcs +isisfish.welcome.menu.file=Fichier +isisfish.welcome.menu.frame=Fen\u00EAtre +isisfish.welcome.menu.help=Aide +isisfish.welcome.menu.help.isisfish=Site d'Isis-Fish +isisfish.welcome.menu.help.isisfishapi=API Isis-Fish +isisfish.welcome.menu.help.javaapi=API Java +isisfish.welcome.menu.help.lutinmatrixapi=API LutinMatrix +isisfish.welcome.menu.help.topiaapi=API ToPIA +isisfish.welcome.menu.input=Saisie +isisfish.welcome.menu.monitor=Fen\u00EAtre de logs +isisfish.welcome.menu.queue=Liste des simulations +isisfish.welcome.menu.result=R\u00E9sultat +isisfish.welcome.menu.script=Script +isisfish.welcome.menu.simulation=Lanceur de simulations +isisfish.welcome.menu.synchro=Synchronisation Serveur +isisfish.welcome.title=Simulation Ifremer +isisfish.wizardGroupCreation.allGroupsSameSize=Tous les groupes ont la m\u00EAme taille +isisfish.wizardGroupCreation.allValues=Entrer toutes les valeurs +isisfish.wizardGroupCreation.computedGrowthCurve=Calcul\u00E9 par une courbe de croissance +isisfish.wizardGroupCreation.firstAge=Premier age +isisfish.wizardGroupCreation.firstAgeHelp=Premier age \= age minimal +isisfish.wizardGroupCreation.firstGroup=Premier groupe +isisfish.wizardGroupCreation.firstLength=Premi\u00E8re taille +isisfish.wizardGroupCreation.firstLengthHelp=Premi\u00E8re taille \= taille minimale du premier groupe +isisfish.wizardGroupCreation.gapBetweenGroupsHelp=L'interval entre chaque groupe est de 1 an +isisfish.wizardGroupCreation.groupWidth=Longueur du groupe +isisfish.wizardGroupCreation.groupWidthHelp=Longueur du groupe \= Longueur du groupe +isisfish.wizardGroupCreation.lastAge=Dernier age +isisfish.wizardGroupCreation.lastAgeHelp=Dernier age \= age maximal +isisfish.wizardGroupCreation.maxGroupsLength=Taille maximale de groupes +isisfish.wizardGroupCreation.maxGroupsLengthHelp=Un point-virgule ';' doit s\u00E9parer les tailles maximales de chaque groupe +isisfish.wizardGroupCreation.numberGroup=Nombre de groupe +isisfish.wizardGroupCreation.numberGroupHelp=Nombre de groupe \= Nombre de groupe voulu +isisfish.wizardGroupCreation.numberGroups=Nombre de groupes +isisfish.wizardGroupCreation.populationCharacteristics=Entrez les caract\u00E9ristiques de la population +isisfish.wizardGroupCreation.selectGroupLengthType=Choisir la longueur du groupe +isisfish.wizardGroupCreation.timeStep=Pas de temps (en mois) +isisfish.wizardGroupCreation.title=Cr\u00E9ation du groupe +isisfish.wizardGroupCreation.undefinedGrowthEquation=L'\u00E9quation utilis\u00E9e est la courbe de croissance de la population. Elle doit \u00EAtre pr\u00E9alablement d\u00E9finie. +isisfish.zone.cells=Cellules de la zone +isisfish.zone.comments=Commentaires +isisfish.zone.name=Nom +region\ already\ exists\ %s\ use\ 'force'\ argument\ to\ force\ overwrite= +simulate\ %s\ with\ file\ %s= Deleted: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties =================================================================== --- isis-fish/trunk/src/main/resources/sensitivity.properties 2009-07-13 09:28:52 UTC (rev 2478) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties 2009-07-16 16:44:13 UTC (rev 2499) @@ -1,63 +0,0 @@ -EffortDescription.CrewFoodCost -EffortDescription.CrewShareRate -EffortDescription.CrewSize -EffortDescription.FishingOperation -EffortDescription.FishingOperationDuration -EffortDescription.FixedCrewSalary -EffortDescription.GearsNumberPerOperation -EffortDescription.LandingCosts -EffortDescription.OtherRunningCost -EffortDescription.RepairAndMaintenanceGearCost -EffortDescription.UnitCostOfFishing -Gear.PopulationSelectivity -Gear.PossibleValue -Gear.StandardisationFactor -Metier.GearParameterValue -MetierSeasonInfo.SpeciesTargetSpecies -Metier.Zone -Population.Capturability -Population.GeographicId -PopulationGroup.Age -PopulationGroup.MaxLength -PopulationGroup.MeanWeight -PopulationGroup.MinLength -PopulationGroup.Price -PopulationGroup.ReproductionRate -Population.Growth -Population.GrowthReverse -Population.MappingZoneReproZoneRecru -Population.MaturityGroup -Population.MeanWeight -Population.MonthGapBetweenReproRecrutement -Population.NaturalDeathRate -Population.NaturalDeathRateMatrix -Population.PlusGroup -Population.Price -Population.RecruitmentDistribution -Population.ReproductionEquation -PopulationSeasonInfo.EmigrationMatrix -PopulationSeasonInfo.GroupChange -PopulationSeasonInfo.ImmigrationMatrix -PopulationSeasonInfo.LengthChangeMatrix -PopulationSeasonInfo.MigrationMatrix -PopulationSeasonInfo.UseEquationMigration -SetOfVessels.FixedCosts -SetOfVessels.NumberOfVessels -SetOfVessels.TechnicalEfficiencyEquation -Species.AgeGroupType -Species.CodeCEE -Strategy.Inactivity -StrategyMonthInfo.LengthChangeMatrix -StrategyMonthInfo.MinInactivityDays -StrategyMonthInfo.ProportionMetier -Strategy.ProportionSetOfVessels -Strategy.SetOfVessels -TripType.MinTimeBetweenTrip -TripType.TripDuration -VesselType.ActivityRange -VesselType.Length -VesselType.MaxTripDuration -VesselType.MinCrewSize -VesselType.Speed -VesselType.TripType -VesselType.UnitFuelCostOfTravel \ No newline at end of file Copied: isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties (from rev 2493, isis-fish/trunk/src/main/resources/sensitivity.properties) =================================================================== --- isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties (rev 0) +++ isis-fish/tags/isis-fish-3.2.0.5-rc1/src/main/resources/sensitivity.properties 2009-07-16 16:44:13 UTC (rev 2499) @@ -0,0 +1,56 @@ +EffortDescription.CrewFoodCost +EffortDescription.CrewShareRate +EffortDescription.CrewSize +EffortDescription.FishingOperation +EffortDescription.FishingOperationDuration +EffortDescription.FixedCrewSalary +EffortDescription.GearsNumberPerOperation +EffortDescription.LandingCosts +EffortDescription.OtherRunningCost +EffortDescription.RepairAndMaintenanceGearCost +EffortDescription.UnitCostOfFishing +Gear.PossibleValue +Gear.StandardisationFactor +Metier.GearParameterValue +Metier.Zone +Population.Capturability +Population.GeographicId +PopulationGroup.Age +PopulationGroup.MaxLength +PopulationGroup.MeanWeight +PopulationGroup.MinLength +PopulationGroup.Price +PopulationGroup.ReproductionRate +Population.Growth +Population.GrowthReverse +Population.MaturityGroup +Population.MeanWeight +Population.MonthGapBetweenReproRecrutement +Population.NaturalDeathRate +Population.NaturalDeathRateMatrix +Population.PlusGroup +Population.Price +Population.RecruitmentDistribution +Population.ReproductionEquation +PopulationSeasonInfo.GroupChange +PopulationSeasonInfo.LengthChangeMatrix +SetOfVessels.FixedCosts +SetOfVessels.NumberOfVessels +SetOfVessels.TechnicalEfficiencyEquation +Species.AgeGroupType +Species.CodeCEE +Strategy.Inactivity +StrategyMonthInfo.LengthChangeMatrix +StrategyMonthInfo.MinInactivityDays +StrategyMonthInfo.ProportionMetier +Strategy.ProportionSetOfVessels +Strategy.SetOfVessels +TripType.MinTimeBetweenTrip +TripType.TripDuration +VesselType.ActivityRange +VesselType.Length +VesselType.MaxTripDuration +VesselType.MinCrewSize +VesselType.Speed +VesselType.TripType +VesselType.UnitFuelCostOfTravel \ No newline at end of file
participants (1)
-
chatellier@users.labs.libre-entreprise.org