r2581 - in isis-fish/trunk: . src/main/java/fr/ifremer/isisfish src/main/java/fr/ifremer/isisfish/datastore src/main/java/fr/ifremer/isisfish/export src/main/java/fr/ifremer/isisfish/simulator src/main/java/fr/ifremer/isisfish/simulator/launcher src/main/java/fr/ifremer/isisfish/ui/script src/main/java/fr/ifremer/isisfish/ui/simulator src/main/resources/i18n src/main/resources/templates/script src/test/java/fr/ifremer/isisfish/datastore
Author: chatellier Date: 2009-09-04 09:06:01 +0000 (Fri, 04 Sep 2009) New Revision: 2581 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java isis-fish/trunk/src/main/resources/templates/script/sensitivityexport.ftl isis-fish/trunk/src/test/java/fr/ifremer/isisfish/datastore/SensitivityExportStorageTest.java Modified: isis-fish/trunk/changelog.txt isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties Log: Fix export loaded too early (not in correct classloader) Move sensitivity exports to their own package Modified: isis-fish/trunk/changelog.txt =================================================================== --- isis-fish/trunk/changelog.txt 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/changelog.txt 2009-09-04 09:06:01 UTC (rev 2581) @@ -1,5 +1,8 @@ isis-fish (3.2.0.5) stable; urgency=low + * Fix export loaded too early (not in correct classloader) + * Move sensitivity exports to their own package + * Fix a date comparison problem (frequent in windows) * Restore running status progress bar indeterminate state -- Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisFish.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -55,6 +55,7 @@ import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SensitivityStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; @@ -378,6 +379,7 @@ ScriptStorage.checkout(); SimulatorStorage.checkout(); SensitivityStorage.checkout(); + SensitivityExportStorage.checkout(); // on ne prend pas toutes les simu ni toutes les regions vcs.update(new File(local, SimulationStorage.SIMULATION_PATH), false); Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -0,0 +1,118 @@ +/* *##% + * Copyright (C) 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. + *##%*/ + +package fr.ifremer.isisfish.datastore; + +import java.io.File; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import fr.ifremer.isisfish.IsisFish; +import fr.ifremer.isisfish.IsisFishException; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.util.Docable; +import fr.ifremer.isisfish.vcs.VCSException; + +/** + * Gestion des fichers VCS de type {@link SensitivityExport} + * (appartenant au module exports). + * + * Created: 18 août 2005 15:07:36 CEST + * + * @author chatellier eric <chatellier at codelutin.com> + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author: chatellier $ + */ +public class SensitivityExportStorage extends ExportStorage implements Docable { + + /** Class logger. */ + private static Log log = LogFactory.getLog(SensitivityExportStorage.class); + + public static final String SENSITIVITY_EXPORT_PATH = "sensitivityexports"; + + /** Template freemarker pour les scripts d'export . */ + public static final String SENSITIVITY_EXPORT_TEMPLATE = "templates/script/sensitivityexport.ftl"; + + @SuppressWarnings("unchecked") + private static Map<String, SensitivityExportStorage> sensitivityExportsCache = (Map<String, SensitivityExportStorage>) new ReferenceMap(); + + /** + * Constructeur. + * + * @param rootSrc le repertoire root de stockage des exports + * @param directory le repertoire de l'export + * @param name le nom de l'export + */ + protected SensitivityExportStorage(File rootSrc, File directory, String name) { + super(rootSrc, directory, name); + } + + public static File getSensitivityExportDirectory() { + File result = IsisFish.config.getDatabaseDirectory(); + result = new File(result, SENSITIVITY_EXPORT_PATH); + result.mkdirs(); + return result; + } + + /** + * Retourne une nouvelle instance de l'export. Compile le fichier si besoin. + * + * @return une nouvelle instance de la classe d'export + * @throws IsisFishException + */ + public SensitivityExport getNewSensitivityExportInstance() throws IsisFishException { + Object result = getNewInstance(); + return (SensitivityExport) result; + } + + /** + * Retourne le storage pour l'export demandé. + * + * @param name le nom de la regle souhaitée + * @return Le storage pour la regle + */ + public static SensitivityExportStorage getSensitivityExport(String name) { + SensitivityExportStorage result = sensitivityExportsCache.get(name); + if (result == null) { + result = new SensitivityExportStorage(IsisFish.config.getDatabaseDirectory(), + getSensitivityExportDirectory(), name); + sensitivityExportsCache.put(name, result); + } + return result; + } + + /** + * Retourne la liste des noms de toutes les régions disponible en local. + * + * @return la liste des noms de toutes les régions disponible en local + */ + public static List<String> getSensitivityExportNames() { + File dir = getSensitivityExportDirectory(); + return getStorageNames(dir); + } + + public static void checkout() throws VCSException { + checkout(IsisFish.config.getDatabaseDirectory(), SENSITIVITY_EXPORT_PATH); + } +} Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SensitivityExportStorage.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/SimulationStorage.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -355,18 +355,19 @@ * Get parameter property. * * @return Parameter property. + * + * @deprecated restore getParameter() mecanism */ public Properties getPropertiesParameter() { Properties prop = new Properties(); File file = getSimulationParametersFile(); - try { FileInputStream in = new FileInputStream(file); prop.load(in); in.close(); - + } catch (IOException eee) { throw new IsisFishRuntimeException(_( "isisfish.error.read.simulation.parameters", file), eee); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/export/ExportHelper.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -30,10 +30,11 @@ import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelutin.topia.TopiaContext; import org.codelutin.topia.persistence.TopiaEntity; import fr.ifremer.isisfish.datastore.ExportStorage; -import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.util.ConverterUtil; @@ -118,17 +119,17 @@ * * @param exportIndex l'index de l'export * @param export l'export a mettre à jour - * @param region le topia context dont on a besoin + * @param context le topia context dont on a besoin * @param props les proprietes contenant les parametre de l'export */ - public static void populateExport(int exportIndex, RegionStorage region, - Export export, Properties props) { - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(region - .getStorage()); - String exportName = ExportStorage.getName(export); - String paramTag = "export." + exportIndex + ".parameter."; + public static void populateSensitivityExport(int exportIndex, TopiaContext context, + SensitivityExport export, Properties props) { + //ConvertUtilsBean beanUtils = ConverterUtil.getConverter(region + // .getStorage()); + String exportName = SensitivityExportStorage.getName(export); + String paramTag = "sensitivityexport." + exportIndex + ".parameter."; - for (Map.Entry<String, Class<?>> entry : ExportStorage + for (Map.Entry<String, Class<?>> entry : SensitivityExportStorage .getParameterNames(export).entrySet()) { String propName = entry.getKey(); Class<?> type = entry.getValue(); @@ -138,10 +139,16 @@ String valueString = "not initialized"; try { valueString = props.getProperty(paramTag + propName); + + // ATTENTION il semblerait que notre intance de beanUtils + // soit ecrasé par celle du MatrixType ... + // a ne pas deplacer avant la boucle + ConvertUtilsBean beanUtils = ConverterUtil.getConverter(context); + Object value = beanUtils.convert(valueString, type); - log.info("DEBUG: set export param: " + paramTag + propName + log.info("DEBUG: set sensitivityexport param: " + paramTag + propName + " = " + value + "(" + valueString + ")"); - ExportStorage.setParameterValue(export, propName, value); + SensitivityExportStorage.setParameterValue(export, propName, value); } catch (Exception eee) { if (log.isWarnEnabled()) { log.info("Properties: " + props); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -48,15 +48,14 @@ import fr.ifremer.isisfish.IsisFishDAOHelper; import fr.ifremer.isisfish.IsisFishException; 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.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SensitivityStorage; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.PopulationDAO; import fr.ifremer.isisfish.entities.Strategy; import fr.ifremer.isisfish.entities.StrategyDAO; -import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.ExportHelper; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; @@ -81,6 +80,12 @@ /** Logger for this class. */ private static Log log = LogFactory.getLog(SimulationParameter.class); + /** Remember last read properties. */ + protected Properties lastReadParameters; + + /** + * @deprecated remove this hack + */ public static String NUMBER_OF_SENSITIVITY_SIMULATION = "numberOfSensitivitySimulation"; /** @@ -148,7 +153,7 @@ protected int analysePlanNumber = -1; /** Export utilisés pour les analyses de sensibilités. */ - protected List<SensitivityExport> sensitivityExport = new ArrayList<SensitivityExport>(); + protected List<SensitivityExport> sensitivityExports = new ArrayList<SensitivityExport>(); /** * Nombre de simulation constituant l'analyse de sensibilité. @@ -283,7 +288,6 @@ result.setProperty("plans", planList); String exportList = ""; - int exportIndex = 0; for (String export : getExportNames()) { exportList += export + ","; @@ -305,10 +309,11 @@ // number of sensitivity simulation String sensitivityExportList = ""; + int sensitivityExportIndex = 0; // WARN only SENSITIVITY are parametrable for now - for (SensitivityExport export : getSensitivityExport()) { - sensitivityExportList += ExportStorage.getName(export) + ","; - Properties exportProp = exportParametertoProperties(exportIndex++, export); + for (SensitivityExport sensitivityExport : getSensitivityExport()) { + sensitivityExportList += SensitivityExportStorage.getName(sensitivityExport) + ","; + Properties exportProp = sensitivityExportParametertoProperties(sensitivityExportIndex++, sensitivityExport); result.putAll(exportProp); } result.setProperty("sensitivityexports", sensitivityExportList); @@ -347,6 +352,16 @@ * @param props property to read */ public void fromProperties(File directory, Properties props) { + + // save properties (use full to read again parameter) + // for exports, or rules.... + lastReadParameters = props; + + // when reading new properties files, clean some information + // to force re instantion on next call + // @see { + sensitivityExports = null; + isisFishVersion = props.getProperty("isisFishVersion", ""); description = props.getProperty("description", ""); regionName = props.getProperty("regionName", ""); @@ -481,7 +496,6 @@ // exports String[] exportList = props.getProperty("exports", "").split(","); - int exportIndex = 0; for (String name : exportList) { if (name != null && !"".equals(name)) { getExportNames().add(name); @@ -504,21 +518,6 @@ } } } - // sensitivity export - String[] sensitivityExportList = props.getProperty("sensitivityexports", "").split(","); - for (String name : sensitivityExportList) { - try { - if (!StringUtils.isEmpty(name)) { - SensitivityExport export = (SensitivityExport)ExportStorage.getExport(name).getNewExportInstance(); - ExportHelper.populateExport(exportIndex++, getRegion(), export, props); - getSensitivityExport().add(export); - } - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find SensitivityExport: " + name, eee); - } - } - } usePreScript = Boolean.parseBoolean(props.getProperty("usePreScript", "false")); @@ -689,21 +688,21 @@ * Permet de mettre les parametres de l'export sous une forme String pour * pouvoir les relire ensuite. * - * @param exportIndex l'index de l'export - * @param export L'export dont on souhaite mettre les parametres dans l'objet + * @param sensitivityExportIndex l'index de l'export + * @param sensitivityExport L'export dont on souhaite mettre les parametres dans l'objet * Properties retourne * @return L'objet Properties contenant les valeurs des parametres de l'export */ - protected Properties exportParametertoProperties(int exportIndex, Export export) { + protected Properties sensitivityExportParametertoProperties(int sensitivityExportIndex, SensitivityExport sensitivityExport) { Properties result = new Properties(); ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion().getStorage()); - for (String paramName : ExportStorage.getParameterNames(export).keySet()) { + for (String paramName : SensitivityExportStorage.getParameterNames(sensitivityExport).keySet()) { String paramValueString; try { - Object value = ExportStorage.getParameterValue(export, paramName); + Object value = SensitivityExportStorage.getParameterValue(sensitivityExport, paramName); paramValueString = beanUtils.convert(value); if (paramValueString != null) { - result.setProperty("export." + exportIndex + ".parameter." + result.setProperty("sensitivityexport." + sensitivityExportIndex + ".parameter." + paramName, paramValueString); } } catch (IsisFishException eee) { @@ -1035,20 +1034,72 @@ } /** + * Return loaded sensitivity export. + * + * If exports are null or empty, try to load it from last ready parameters. + * * @return the sensitivityExportNames */ public List<SensitivityExport> getSensitivityExport() { - if (sensitivityExport == null) { - sensitivityExport = new ArrayList<SensitivityExport>(); + if (sensitivityExports == null || sensitivityExports.isEmpty()) { + sensitivityExports = new ArrayList<SensitivityExport>(); + + if (lastReadParameters != null) { + try { + // On verifie tout d'abord que l'on ai pas dans une simulation + // si on y es, on utilise le context static non null du thread local + // Resoud les lazy exceptions des parametres des regles + boolean mustClose = false; + TopiaContext tx = SimulationContext.get().getDB(); + + if (tx == null) { + // not in simulation, create transaction + tx = getRegion().getStorage().beginTransaction(); + mustClose = true; + } + + // sensitivity export + String[] sensitivityExportList = lastReadParameters.getProperty("sensitivityexports", "").split(","); + int sensitivityExportIndex = 0; + for (String name : sensitivityExportList) { + try { + if (!StringUtils.isEmpty(name)) { + SensitivityExport sensitivityExport = SensitivityExportStorage.getSensitivityExport(name).getNewSensitivityExportInstance(); + ExportHelper.populateSensitivityExport(sensitivityExportIndex++, tx, sensitivityExport, lastReadParameters); + sensitivityExports.add(sensitivityExport); + } + } catch (IsisFishException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't find SensitivityExport: " + name, eee); + } + } + } + + // si la transaction a été ouverte (pas dans une simulation) + // on la referme + if (mustClose) { + tx.closeContext(); + } + } catch (TopiaException eee1) { + if (log.isWarnEnabled()) { + log.warn("Can't get TopiaContext", eee1); + } + } + } + else { + if (log.isDebugEnabled()) { + log.debug("No last read properties, skip sensitivity exports reloading"); + } + } } - return sensitivityExport; + return sensitivityExports; } /** * @param sensitivityExport the sensitivityExportNames to set */ public void setSensitivityExport(List<SensitivityExport> sensitivityExport) { - this.sensitivityExport = sensitivityExport; + this.sensitivityExports = sensitivityExport; } /** @@ -1278,7 +1329,7 @@ result.scriptLogLevel = scriptLogLevel; result.libLogLevel = libLogLevel; result.numberOfSensitivitySimulation = numberOfSensitivitySimulation; - result.sensitivityExport.addAll(sensitivityExport); + result.sensitivityExports.addAll(getSensitivityExport()); result.sensitivityCalculator = sensitivityCalculator; return result; Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -62,6 +62,7 @@ import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; import fr.ifremer.isisfish.export.SensitivityExport; @@ -947,11 +948,11 @@ // copie de tous les exports de sensitivity a utiliser for (SensitivityExport sensitivity : param.getSensitivityExport()) { - String name = ExportStorage.getName(sensitivity); + String name = SensitivityExportStorage.getName(sensitivity); name = name.endsWith(".java") ? name : name + ".java"; FileUtil.copy( - new File(ExportStorage.getExportDirectory(), name), - new File(tmpDirectory, ExportStorage.EXPORT_PATH + new File(SensitivityExportStorage.getSensitivityExportDirectory(), name), + new File(tmpDirectory, SensitivityExportStorage.SENSITIVITY_EXPORT_PATH + File.separator + name)); } @@ -1021,6 +1022,10 @@ List<File> tmp = FileUtil.find(new File(directory, ExportStorage.EXPORT_PATH), ".*\\.java$", true); fileToConvert.addAll(tmp); + + tmp = FileUtil.find(new File(directory, + SensitivityExportStorage.SENSITIVITY_EXPORT_PATH), ".*\\.java$", true); + fileToConvert.addAll(tmp); tmp = FileUtil.find(new File(directory, RuleStorage.RULE_PATH), ".*\\.java$", true); @@ -1070,6 +1075,10 @@ List<File> tmp = FileUtil.find(new File(directory, ExportStorage.EXPORT_PATH), ".*\\.java$", true); fileToCompile.addAll(tmp); + + tmp = FileUtil.find(new File(directory, + SensitivityExportStorage.SENSITIVITY_EXPORT_PATH), ".*\\.java$", true); + fileToCompile.addAll(tmp); tmp = FileUtil.find(new File(directory, RuleStorage.RULE_PATH), ".*\\.java$", true); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptAction.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -59,6 +59,7 @@ import fr.ifremer.isisfish.datastore.JavaSourceStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SensitivityStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; import fr.ifremer.isisfish.equation.Language; @@ -169,6 +170,10 @@ public List<String> getSensitivityNames() { return SensitivityStorage.getSensitivityNames(); } + + public List<String> getSensitivityExportsNames() { + return SensitivityExportStorage.getSensitivityExportNames(); + } public List<String> getCategories() { return FormuleStorage.getCategories(); @@ -205,6 +210,10 @@ public File getSensitivityDirectory() { return SensitivityStorage.getSensitivityDirectory(); } + + public File getSensitivityExportDirectory() { + return SensitivityExportStorage.getSensitivityExportDirectory(); + } /** * Creer un nouveau script, ici un script peut-etre un Script, un Simulator, @@ -291,6 +300,9 @@ case Sensitivity: script = SensitivityStorage.getSensitivity(fileName); break; + case SensitivityExport: + script = SensitivityExportStorage.getSensitivityExport(fileName); + break; default: log.fatal("ScriptType unknown: " + scriptType); } @@ -377,6 +389,9 @@ case Sensitivity: script = SensitivityStorage.getSensitivity(fileName); break; + case SensitivityExport: + script = SensitivityExportStorage.getSensitivityExport(fileName); + break; default: log.fatal("ScriptType unknown: " + fileName); } @@ -485,8 +500,9 @@ } if (file.isFile()) { File parentFile = file.getParentFile(); - if (!dirFound.contains(parentFile)) + if (!dirFound.contains(parentFile)) { dirFound.add(parentFile); + } dirWithFileFound.add(parentFile); result.add(file.getAbsolutePath().substring(prefixLength)); } else { @@ -858,16 +874,28 @@ /** enum to encapsulate a script module */ protected enum ScriptMapping { - Script(ScriptStorage.getScriptDirectory(), - ScriptStorage.SCRIPT_TEMPLATE), Simulator(SimulatorStorage - .getSimulatorDirectory(), SimulatorStorage.SIMULATOR_TEMPLATE), Export( + Script( + ScriptStorage.getScriptDirectory(), + ScriptStorage.SCRIPT_TEMPLATE), + Simulator( + SimulatorStorage.getSimulatorDirectory(), + SimulatorStorage.SIMULATOR_TEMPLATE), + Export( ExportStorage.getExportDirectory(), - ExportStorage.EXPORT_TEMPLATE), Rule(RuleStorage - .getRuleDirectory(), RuleStorage.RULE_TEMPLATE), AnalysePlan( + ExportStorage.EXPORT_TEMPLATE), + Rule( + RuleStorage.getRuleDirectory(), + RuleStorage.RULE_TEMPLATE), + AnalysePlan( AnalysePlanStorage.getAnalysePlanDirectory(), - AnalysePlanStorage.ANALYSE_PLAN_TEMPLATE), Sensitivity( + AnalysePlanStorage.ANALYSE_PLAN_TEMPLATE), + Sensitivity( SensitivityStorage.getSensitivityDirectory(), - SensitivityStorage.SENSIVITY_TEMPLATE), EquationModel( + SensitivityStorage.SENSIVITY_TEMPLATE), + SensitivityExport( + SensitivityExportStorage.getSensitivityExportDirectory(), + SensitivityExportStorage.SENSITIVITY_EXPORT_TEMPLATE), + EquationModel( FormuleStorage.getFormuleDirectory(), FormuleStorage.FORMULE_TEMPLATE); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/script/ScriptUI.jaxx 2009-09-04 09:06:01 UTC (rev 2581) @@ -54,6 +54,8 @@ f = new File(getContextValue(ScriptAction.class).getAnalysePlanDirectory().getPath() + File.separator + selectedValue); } else if (parent.equals("Sensitivity")) { f = new File(getContextValue(ScriptAction.class).getSensitivityDirectory().getPath() + File.separator + selectedValue); + } else if (parent.equals("SensitivityExport")) { + f = new File(getContextValue(ScriptAction.class).getSensitivityExportDirectory().getPath() + File.separator + selectedValue); } else { f = new File(getContextValue(ScriptAction.class).getFormuleDirectory().getPath() + File.separator + parent + File.separator + selectedValue); parent = "EquationModel"; @@ -86,6 +88,7 @@ DefaultMutableTreeNode ruleNode = new DefaultMutableTreeNode(new GenericCell("Rule", null, null)); DefaultMutableTreeNode analysePlanNode = new DefaultMutableTreeNode(new GenericCell("AnalysePlan", null, null)); DefaultMutableTreeNode sensitivityNode = new DefaultMutableTreeNode(new GenericCell("Sensitivity", null, null)); + DefaultMutableTreeNode sensitivityExportNode = new DefaultMutableTreeNode(new GenericCell("SensitivityExport", null, null)); DefaultMutableTreeNode equationModelNode = new DefaultMutableTreeNode(new GenericCell("EquationModel", null, null)); setNode(scriptNode, getContextValue(ScriptAction.class).getScriptNames(), "Script"); setNode(simulatorNode, getContextValue(ScriptAction.class).getSimulatorNames(), "Simulator"); @@ -93,6 +96,7 @@ setNode(ruleNode, getContextValue(ScriptAction.class).getRuleNames(), "Rule"); setNode(analysePlanNode, getContextValue(ScriptAction.class).getAnalysePlanNames(), "AnalysePlan"); setNode(sensitivityNode, getContextValue(ScriptAction.class).getSensitivityNames(), "Sensitivity"); + setNode(sensitivityExportNode, getContextValue(ScriptAction.class).getSensitivityExportsNames(), "SensitivityExport"); setNode(equationModelNode, getContextValue(ScriptAction.class).getCategories(), "EquationModel"); for (Enumeration e = equationModelNode.children(); e.hasMoreElements();){ DefaultMutableTreeNode node = (DefaultMutableTreeNode)e.nextElement(); @@ -105,7 +109,8 @@ treeModel.insertNodeInto(ruleNode, rootNode, 3); treeModel.insertNodeInto(analysePlanNode, rootNode, 4); treeModel.insertNodeInto(sensitivityNode, rootNode, 5); - treeModel.insertNodeInto(equationModelNode, rootNode, 6); + treeModel.insertNodeInto(sensitivityExportNode, rootNode, 6); + treeModel.insertNodeInto(equationModelNode, rootNode, 7); return treeModel; } protected void setNode(DefaultMutableTreeNode node, java.util.List<String> values, String type) { @@ -323,6 +328,7 @@ <JMenuItem id="miNewRule" text="isisfish.script.menu.txtNewRule" onActionPerformed='newScript("Rule")' accelerator="accNewRule"/> <JMenuItem id="miNewAnalysePlan" text="isisfish.script.menu.txtNewAnalysePlan" onActionPerformed='newScript("AnalysePlan")' accelerator="accNewAnalysePlan"/> <JMenuItem id="miNewSensitivity" text="isisfish.script.menu.txtNewSensitivity" onActionPerformed='newScript("Sensitivity")' accelerator="accNewSensitivity"/> + <JMenuItem id="miNewSensitivityExport" text="isisfish.script.menu.txtNewSensitivityExport" onActionPerformed='newScript("SensitivityExport")' accelerator="accNewSensitivityExport"/> <JMenuItem id="miNewEquationModel" text="isisfish.script.menu.txtNewEquationModel" onActionPerformed='newScript("EquationModel")' accelerator="accNewEquationModel"/> </JMenu> <JMenuItem id="miSave" text="isisfish.script.menu.save" onActionPerformed="saveScript()" accelerator="accSave"/> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -55,6 +55,7 @@ import fr.ifremer.isisfish.datastore.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.datastore.ScriptStorage; +import fr.ifremer.isisfish.datastore.SensitivityExportStorage; import fr.ifremer.isisfish.datastore.SensitivityStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; @@ -561,17 +562,7 @@ List<String> result = new ArrayList<String>(); List<String> exportNames = ExportStorage.getExportNames(); for (String export : exportNames) { - try { - ExportStorage storage = ExportStorage.getExport(export); - Export exInstance = storage.getNewExportInstance(); - if (!SensitivityExport.class.isInstance(exInstance)) { - result.add(export); - } - } catch (IsisFishException e) { - if (log.isErrorEnabled()) { - log.error("Can't get export names", e); - } - } + result.add(export); } return result; } @@ -680,22 +671,11 @@ /* * Sensitivity */ - public List<String> getSensitivityExportNames() { List<String> result = new ArrayList<String>(); - List<String> exportNames = ExportStorage.getExportNames(); + List<String> exportNames = SensitivityExportStorage.getSensitivityExportNames(); for (String export : exportNames) { - try { - ExportStorage storage = ExportStorage.getExport(export); - Export exInstance = storage.getNewExportInstance(); - if (SensitivityExport.class.isInstance(exInstance)) { - result.add(export); - } - } catch (IsisFishException e) { - if (log.isErrorEnabled()) { - log.error("Can't get sensitivity export names", e); - } - } + result.add(export); } return result; } @@ -732,7 +712,7 @@ public Map<String, Class<?>> getSensitivityExportParameterNames( SensitivityExport export) { - return ExportStorage.getParameterNames(export); + return SensitivityExportStorage.getParameterNames(export); } public void setSensitivityExportParameterValue(Export export, @@ -748,10 +728,10 @@ } } - public Object getSensitivityExportParameterValue(Export export, String paramName) { + public Object getSensitivityExportParameterValue(SensitivityExport sensitivityExport, String paramName) { Object result = null; try { - result = ExportStorage.getParameterValue(export, paramName); + result = SensitivityExportStorage.getParameterValue(sensitivityExport, paramName); } catch (IsisFishException e) { if (log.isErrorEnabled()) { log.error("Can't get sensitivity export param value", e); Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-09-04 09:06:01 UTC (rev 2581) @@ -893,6 +893,7 @@ isisfish.script.menu.txtNewRule=New rule isisfish.script.menu.txtNewScript=New script isisfish.script.menu.txtNewSensitivity=New sensitivity calculator +isisfish.script.menu.txtNewSensitivityExport=New sensitivity export isisfish.script.menu.txtNewSimulator=New simulator isisfish.script.menu.txtVCS=Server isisfish.script.menu.update=Update from server Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-09-03 14:18:55 UTC (rev 2580) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-09-04 09:06:01 UTC (rev 2581) @@ -893,6 +893,7 @@ 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.txtNewSensitivityExport=Nouvel export de sensibilit\u00E9 isisfish.script.menu.txtNewSimulator=Nouveau simulateur isisfish.script.menu.txtVCS=Serveur isisfish.script.menu.update=Synchronisation Added: isis-fish/trunk/src/main/resources/templates/script/sensitivityexport.ftl =================================================================== --- isis-fish/trunk/src/main/resources/templates/script/sensitivityexport.ftl (rev 0) +++ isis-fish/trunk/src/main/resources/templates/script/sensitivityexport.ftl 2009-09-04 09:06:01 UTC (rev 2581) @@ -0,0 +1,76 @@ +/* + * Copyright (C) ${date?date?string("yyyy")} ${author} + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 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 exports; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.Writer; + +import static org.codelutin.i18n.I18n._; +import org.codelutin.math.matrix.*; +import fr.ifremer.isisfish.util.Doc; +import fr.ifremer.isisfish.entities.*; +import fr.ifremer.isisfish.export.SensitivityExport; +import fr.ifremer.isisfish.datastore.SimulationStorage; +import fr.ifremer.isisfish.datastore.ResultStorage; + +/** + * ${name}.java + * + * Created: ${date?date?string.long} + * + * @author ${author} <${email}> + * @version $Revision: 1545 $ + * + * Last update: $Date: ${date?date?string.long} $ + * by : $Author: ${author} $ + */ +public class ${name} implements SensitivityExport { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(${name}.class); + + public String [] necessaryResult = { + // put here all necessary result for this rule + // example: + // ResultName.MATRIX_BIOMASS, + // ResultName.MATRIX_NET_VALUE_OF_LANDINGS_PER_STRATEGY_MET, + }; + + public String[] getNecessaryResult() { + return this.necessaryResult; + } + + public String getExportFilename() { + return "${name}"; + } + + public String getExtensionFilename() { + return ".csv"; + } + + public String getDescription() { + return _("TODO export description"); + } + + public void export(SimulationStorage simulation, Writer out) throws Exception { + // put your code here, and write export with: out.write("...") + } +} \ No newline at end of file Added: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/datastore/SensitivityExportStorageTest.java =================================================================== --- isis-fish/trunk/src/test/java/fr/ifremer/isisfish/datastore/SensitivityExportStorageTest.java (rev 0) +++ isis-fish/trunk/src/test/java/fr/ifremer/isisfish/datastore/SensitivityExportStorageTest.java 2009-09-04 09:06:01 UTC (rev 2581) @@ -0,0 +1,87 @@ +/* *##% + * Copyright (C) 2006 - 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. + *##%*/ + +package fr.ifremer.isisfish.datastore; + +import java.io.StringWriter; +import java.io.Writer; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.IsisFish; +import freemarker.template.Configuration; +import freemarker.template.Template; + +/** + * SensitivityExportStorageTest. + * + * Created: jeu. sept. 3 12:16:08 CEST 2009 + * + * @author poussin + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author: tchemit $ + */ +public class SensitivityExportStorageTest extends AbstractIsisFishTest { + + protected Configuration freemarkerConfiguration; + + @Before + public void setUp() throws Exception { + freemarkerConfiguration = getFreemarkerConfiguration(); + } + + @Test + public void testNewSensitivityExportWithCompilation() throws Exception { + + String fileName = "TestSensitivityExport1"; + + SensitivityExportStorage sensitivityExportStorage = SensitivityExportStorage.getSensitivityExport(fileName); + + // get template + Template template = freemarkerConfiguration + .getTemplate(SensitivityExportStorage.SENSITIVITY_EXPORT_TEMPLATE); + + // context values + Map<String, Object> root = new HashMap<String, Object>(); + // FIXME what is category ? + root.put("category", ""); + root.put("name", fileName); + root.put("date", new Date()); + root.put("author", IsisFish.config.getUserName()); + root.put("email", IsisFish.config.getUserMail()); + + // process template + Writer out = new StringWriter(); + template.process(root, out); + out.flush(); + sensitivityExportStorage.setContent(out.toString()); + + // 0 = compile success + int compileResult = sensitivityExportStorage.compile(false, null); + Assert.assertEquals(0, compileResult); + } + +} Property changes on: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/datastore/SensitivityExportStorageTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL"
participants (1)
-
chatellier@users.labs.libre-entreprise.org