r3035 - isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator
Author: chatellier Date: 2010-04-29 16:19:05 +0000 (Thu, 29 Apr 2010) New Revision: 3035 Log: Add simulation cache to not keep all simulation huge prescript in memory. Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 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 2010-04-29 16:14:25 UTC (rev 3034) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2010-04-29 16:19:05 UTC (rev 3035) @@ -1,211 +1,58 @@ /* *##% - * Copyright (C) 2006 - 2010 Ifremer, Code Lutin, Cédric Pineau, Benjamin Poussin - * - * This program is free software; you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation; either version 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. ##% - */ + * Copyright (C) 2010 Code Lutin, Chatellier Eric + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 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; -import static org.nuiton.i18n.I18n._; - import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; -import org.apache.commons.beanutils.ConvertUtilsBean; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.MatrixFactory; -import org.nuiton.math.matrix.MatrixHelper; import org.nuiton.math.matrix.MatrixND; -import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.util.SortedProperties; -import org.nuiton.util.StringUtil; import fr.ifremer.isisfish.IsisConfig; -import fr.ifremer.isisfish.IsisFishDAOHelper; -import fr.ifremer.isisfish.IsisFishException; -import fr.ifremer.isisfish.datastore.AnalysePlanStorage; 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.ExportHelper; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityCalculator; -import fr.ifremer.isisfish.util.ConverterUtil; /** - * Contains all parameters for one simulation. - * - * {@link SimulationParameter} must now be loaded from a {@link Properties} - * object. - * {@link #toProperties()} method, now return a new {@link Properties} object - * filled with : - * <ul> - * <li>non modified original properties - * <li>new properties if some objects has been instantiated by getters(). - * </ul> + * TODO add comment here. * - * Created: 10 janv. 2006 17:03:37 - * - * @author poussin * @author chatellier - * * @version $Revision$ - * - * Last update: $Date$ + * + * Last update : $Date$ * By : $Author$ */ -public class SimulationParameter { +public interface SimulationParameter { - /** Logger for this class. */ - private static Log log = LogFactory.getLog(SimulationParameter.class); - - /** Remember last read properties. */ - protected Properties propertiesParameters; - /** - * Isis-fish version that permit to do the simulation. - * Must be set just before simulation by simulator. - */ - protected String isisFishVersion; - - /** Description de la simulation. */ - protected String description; - - /** Nom de la region sur lequel on simule. */ - protected String regionName; - - /** Nombre d'année sur lequel on souhaite simuler. */ - protected Integer numberOfYear; - - /** Le nom de l'objet script a utiliser pour faire la simulation. */ - protected String simulatorName; - - /** Utilisation ou non des optimisations. */ - protected Boolean useOptimization; - - /** Utilisation ou non des statistiques. */ - protected Boolean useStatistic; - - /** La liste des strategies a utiliser pour la simulation. */ - protected List<Strategy> strategies; - - /** La liste des populations a utiliser pour la simulation. */ - protected List<Population> populations; - - /** Les effectifs initiaux des différentes population. */ - protected Map<Population, MatrixND> numbers; - - /** La liste des regles de gestions a utiliser pour la simulation. */ - protected List<Rule> rules; - - /** La liste des regles potentiellement ajoutée par les plans d'analyse. */ - protected List<String> extraRules; - - /** La liste des plans a utiliser pour la simulation. */ - protected List<AnalysePlan> analysePlans; - - /** Ma liste des exports automatique a faire en fin de simulation. */ - protected List<String> exportNames; - - /** Utilisation du script de pre simulation. */ - protected Boolean usePreScript; - - /** Le script de pre simulation a utiliser. */ - protected String preScript; - - /** Utilisation du plan d'analyse. */ - protected Boolean useAnalysePlan; - - /** - * Le numero de sequence de la liste des plans d'analyse. Le premier - * élement du plan doit etre 0. Si la simulation ne fait pas partie d'un - * plan la valeur est -1. */ - protected Integer analysePlanNumber; - - /** Export utilisés pour les analyses de sensibilités. */ - protected List<SensitivityExport> sensitivityExports; - - /** - * Nombre de simulation constituant l'analyse de sensibilité. - * - * FIXME ce parametre ne devrait pas ce trouver à cet endroit. - * Ce n'est pas un parametres, mais une infos de simulation. - * Cela permet de savoir combien de simulation il y a au total - * pour savoir quand elle sont terminées. - */ - protected Integer numberOfSensitivitySimulation; - - /** Export utilisés pour les analyses de sensibilités. */ - protected SensitivityCalculator sensitivityCalculator; - - /** La liste des resultats qui nous interesse. */ - protected Collection<String> resultEnabled; - - /** Autre parametre defini par l'utilisateur. */ - protected Map<String, String> tagValue; - - /** - * Si vrai seul les exports automatiques ne sont souhaiter, la simulation - * pourrait etre supprimée a la fin. - */ - protected Boolean onlyExport; - - /** Le niveau de log du simulateur à utiliser pendant la simulation. Par defaut info. */ - protected String simulLogLevel = "info"; - /** Le niveau de log des scripts à utiliser pendant la simulation. Par defaut info. */ - protected String scriptLogLevel = "info"; - /** Le niveau de log des librairies à utiliser pendant la simulation. Par defaut error. */ - protected String libLogLevel = "error"; - - /** La region corespondant au parametre {@link #regionName}. */ - protected transient RegionStorage region; - - /** * Permet de verifier que tous les parametres sont bon. Si ce n'est pas le * cas la liste retournée contient la liste des messages d'erreur. * * @return la liste d'erreur */ - public List<String> check() { - List<String> result = new ArrayList<String>(); - // TODO faire la verif et pour chaque erreur mettre un message - // dans la liste result (par exemple si pas d'effectif - // pour une pop - return result; - } + public abstract List<String> check(); /** * Get isis fish version for the simulation. @@ -214,27 +61,14 @@ * * @return the isisFishVersion. */ - public String getIsisFishVersion() { - // if not already set - if (isisFishVersion == null) { - if (propertiesParameters != null) { - isisFishVersion = propertiesParameters.getProperty("isisFishVersion", ""); - } else { - // default value - isisFishVersion = IsisConfig.getVersion(); - } - } - return isisFishVersion; - } + public abstract String getIsisFishVersion(); /** * Set isis fish Version. * * @param isisFishVersion The isisFishVersion to set. */ - public void setIsisFishVersion(String isisFishVersion) { - this.isisFishVersion = isisFishVersion; - } + public abstract void setIsisFishVersion(String isisFishVersion); /** * Get description property. @@ -243,285 +77,31 @@ * * @return Description property. */ - public String getDescription() { + public abstract String getDescription(); - if (description == null) { - if (propertiesParameters != null) { - description = propertiesParameters.getProperty("description", ""); - } else { - // default value - description = ""; - } - } - return this.description; - } - /** * Set simulation description. * * @param description the description to set. */ - public void setDescription(String description) { - this.description = description; - } + public abstract void setDescription(String description); /** * Load region conresponding to {@link #regionName}. * * @return the region */ - public RegionStorage getRegion() { + public abstract RegionStorage getRegion(); - if (region == null || !region.getName().equals(getRegionName())) { - // bien faire attention ici que la bonne region est ouverte - // - isis-database-3 dans le cas d'une region normale - // - simulation dans le cas d'une simulation - region = RegionStorage.getRegion(getRegionName()); - } else { - if (log.isDebugEnabled()) { - log.debug(_("Region %s already inited", getRegionName())); - } - } - return this.region; - } + public abstract MatrixND getNumberOf(Population pop); - public MatrixND getNumberOf(Population pop) { - if (numbers == null) { - numbers = new LinkedHashMap<Population, MatrixND>(); - } - MatrixND result = numbers.get(pop); - if (result == null) { - List groups = pop.getPopulationGroup(); - List zones = pop.getPopulationZone(); - - if (groups.size() == 0) { - groups.add("No group"); - } - if (zones.size() == 0) { - zones.add("No zone"); - } - List[] semantics = new List[] { groups, zones }; - result = MatrixFactory.getInstance().create(semantics); - - numbers.put(pop, result); - } - return result; - } - /** - * Permet de mettre les parametres de la regle sous une forme String pour - * pouvoir les relire ensuite. - * - * @param ruleIndex l'index de la rule - * @param rule La regle dont on souhaite mettre les parametres dans l'objet - * Properties retourne - * @return L'objet Properties contenant les valeurs des parametres de la - * regle - */ - protected Properties ruleParametertoProperties(int ruleIndex, Rule rule) { - Properties result = new Properties(); - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion() - .getStorage()); - for (String paramName : RuleStorage.getParameterNames(rule).keySet()) { - String paramValueString; - try { - Object value = RuleStorage.getParameterValue(rule, paramName); - paramValueString = beanUtils.convert(value); - if (paramValueString != null) { - result.setProperty("rule." + ruleIndex + ".parameter." + paramName, paramValueString); - } - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't convert parameter value to String: " + paramName, eee); - } - } - } - - return result; - } - - /** - * Permet de mettre les parametres de l'export sous une forme String pour - * pouvoir les relire ensuite. - * - * @param sensitivityExportIndex l'index de l'export - * @param sensitivityExport l'export dont on souhaite mettre les parametres dans l'objet - * Properties retourné - * @return L'objet Properties contenant les valeurs des parametres de l'export - */ - protected Properties sensitivityExportParametertoProperties( - int sensitivityExportIndex, SensitivityExport sensitivityExport) { - Properties result = new Properties(); - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion().getStorage()); - for (String paramName : SensitivityExportStorage.getParameterNames(sensitivityExport).keySet()) { - try { - Object value = SensitivityExportStorage.getParameterValue( - sensitivityExport, paramName); - String paramValueString = beanUtils.convert(value); - if (paramValueString != null) { - result.setProperty("sensitivityexport." - + sensitivityExportIndex + ".parameter." - + paramName, paramValueString); - } - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't convert parameter value to String: " - + paramName, eee); - } - } - } - - return result; - } - - /** - * Permet de mettre les parametres du calculateur sous une forme String pour - * pouvoir les relire ensuite. - * - * @param sensitivityIndex l'index du calculateur de sensitivity - * @param calculator Le calculateurdont on souhaite mettre les parametres dans l'objet - * Properties retourne - * @return L'objet Properties contenant les valeurs des parametres du calculateur de sensibilité - */ - protected Properties sensitivityCalculatorParametertoProperties( - int sensitivityIndex, SensitivityCalculator calculator) { - Properties result = new Properties(); - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion().getStorage()); - for (String paramName : SensitivityStorage.getParameterNames(calculator).keySet()) { - try { - Object value = SensitivityStorage.getParameterValue(calculator, - paramName); - String paramValueString = beanUtils.convert(value); - if (paramValueString != null) { - result.setProperty("sensitivity." + sensitivityIndex + ".parameter." + paramName, paramValueString); - } - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't convert parameter value to String: " - + paramName, eee); - } - } - } - - return result; - } - - /** - * Permet de mettre les parametres du plan sous une forme String pour - * pouvoir les relire ensuite. - * - * @param planIndex l'index du plan - * @param plan Le plan dont on souhaite mettre les parametres dans l'objet - * Properties retourne - * @return L'objet Properties contenant les valeurs des parametres du plan - */ - protected Properties planParametertoProperties(int planIndex, - AnalysePlan plan) { - Properties result = new Properties(); - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion().getStorage()); - for (String paramName : AnalysePlanStorage.getParameterNames(plan).keySet()) { - try { - Object value = AnalysePlanStorage.getParameterValue(plan,paramName); - String paramValueString = beanUtils.convert(value); - if (paramValueString != null) { - result.setProperty("plan." + planIndex + ".parameter." - + paramName, paramValueString); - } - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't convert parametre value to String: " - + paramName, eee); - } - } - } - - return result; - } - - /** - * Recupere dans prop les valeurs des champs specifique au plan et met a - * jour les champs du plan. - * - * @param planIndex l'index du plan - * @param plan le plan dont les parametres doivent etre lu depuis les - * proprietes - * @param props les proprietes contenant les parametre du plan - */ - protected void populateAnalysePlan(int planIndex, AnalysePlan plan, - Properties props) { - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion() - .getStorage()); - String planName = AnalysePlanStorage.getName(plan); - String paramTag = "plan." + planIndex + ".parameter."; - - for (Map.Entry<String, Class<?>> entry : AnalysePlanStorage.getParameterNames(plan).entrySet()) { - String propName = entry.getKey(); - Class<?> type = entry.getValue(); - if (TopiaEntity.class.isAssignableFrom(type)) { - type = TopiaEntity.class; - } - String valueString = props.getProperty(paramTag + propName); - Object value = beanUtils.convert(valueString, type); - try { - AnalysePlanStorage.setParameterValue(plan, propName, value); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't reload field " + propName + " for plan " - + planName, eee); - } - } - } - } - - /** - * Recupere dans prop les valeurs des champs specifique au calculateur de - * sensibilité et met a jour les champs du calculateur. - * - * @param calculatorIndex l'index du calculateur - * @param calculator le calculateur dont les parametres doivent etre lu depuis lesproprietes - * @param props les proprietes contenant les parametre du calculateur - */ - protected void populateSensitivityCalculator(int calculatorIndex, - SensitivityCalculator calculator, Properties props) { - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(getRegion() - .getStorage()); - String calculatorName = SensitivityStorage.getName(calculator); - String paramTag = "sensitivity." + calculatorIndex + ".parameter."; - - for (Map.Entry<String, Class<?>> entry : SensitivityStorage.getParameterNames(calculator).entrySet()) { - String propName = entry.getKey(); - Class<?> type = entry.getValue(); - if (TopiaEntity.class.isAssignableFrom(type)) { - type = TopiaEntity.class; - } - String valueString = props.getProperty(paramTag + propName); - Object value = beanUtils.convert(valueString, type); - try { - SensitivityStorage.setParameterValue(calculator, propName, value); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't reload field " + propName - + " for sensitivity calculator " + calculatorName, - eee); - } - } - } - } - - /** * Get extra rules list. * * @return Returns the extraRules. */ - public List<String> getExtraRules() { + public abstract List<String> getExtraRules(); - if (extraRules == null) { - // no properties in config ? - extraRules = new ArrayList<String>(); - } - return extraRules; - } - /** * Add extra rules. * @@ -530,81 +110,19 @@ * * @param extraRules extra rules to add */ - public void addExtraRules(String... extraRules) { - getExtraRules().addAll(Arrays.asList(extraRules)); - } + public abstract void addExtraRules(String... extraRules); /** * Get instantiated population list. * * @return Returns the populations. */ - public List<Population> getPopulations() { - if (populations == null) { - populations = new ArrayList<Population>(); + public abstract List<Population> getPopulations(); - if (propertiesParameters != 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; - } - - PopulationDAO populationDAO = IsisFishDAOHelper - .getPopulationDAO(tx); - String[] populationList = propertiesParameters.getProperty( - "populations", "").split(","); - for (String name : populationList) { - if (name != null && !"".equals(name)) { - try { - Population population = populationDAO.findByName(name); - populations.add(population); - - String numberAsString = propertiesParameters.getProperty("population." + name + ".number"); - List number = MatrixHelper.convertStringToList(numberAsString); - MatrixND mat = getNumberOf(population); - mat.fromList(number); - } catch (TopiaException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find population: " + 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 PopulationDAO", eee1); - } - } - } else { - if (log.isDebugEnabled()) { - log.debug("No last read properties, skip population reloading"); - } - } - } - return populations; - } - /** * @param populations The populations to set. */ - public void setPopulations(List<Population> populations) { - this.populations = populations; - } + public abstract void setPopulations(List<Population> populations); /** * Get instantiated strategies list. @@ -613,80 +131,21 @@ * * @return Returns the strategies. */ - public List<Strategy> getStrategies() { + public abstract List<Strategy> getStrategies(); - if (strategies == null) { - - strategies = new ArrayList<Strategy>(); - - if (propertiesParameters != null) { - strategies = new ArrayList<Strategy>(); - - 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; - } - - StrategyDAO strategyDAO = IsisFishDAOHelper.getStrategyDAO(tx); - String[] strategyList = propertiesParameters.getProperty("strategies", "").split(","); - for (String name : strategyList) { - if (name != null && !"".equals(name)) { - try { - Strategy str = strategyDAO.findByName(name); - strategies.add(str); - } catch (TopiaException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find strategy: " + 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 StrategyDAO", eee1); - } - } - } else { - if (log.isDebugEnabled()) { - log.debug("No last read properties, skip strategies reloading"); - } - } - } - return strategies; - } - /** * Set strategies list. * * @param strategies strategies list to set */ - public void setStrategies(List<Strategy> strategies) { - this.strategies = strategies; - } + public abstract void setStrategies(List<Strategy> strategies); /** * Add new analyse plan. * * @param plan analyse plan to add */ - public void addAnalysePlan(AnalysePlan plan) { - getAnalysePlans().add(plan); - } + public abstract void addAnalysePlan(AnalysePlan plan); /** * Remove a plan. @@ -694,9 +153,7 @@ * @param plan * @return {@code true} if this list contained the specified element */ - public boolean removeAnalysePlan(AnalysePlan plan) { - return getAnalysePlans().remove(plan); - } + public abstract boolean removeAnalysePlan(AnalysePlan plan); /** * Get instantiated analyse plan list. @@ -705,81 +162,32 @@ * * @return Returns the plans. */ - public List<AnalysePlan> getAnalysePlans() { - if (analysePlans == null) { + public abstract List<AnalysePlan> getAnalysePlans(); - analysePlans = new ArrayList<AnalysePlan>(); - - if (propertiesParameters != null) { - // analyse plan - String[] planList = propertiesParameters.getProperty("plans", - "").split(","); - int planIndex = 0; - for (String name : planList) { - if (name != null && !"".equals(name)) { - try { - AnalysePlan plan = AnalysePlanStorage - .getAnalysePlan(name) - .getNewAnalysePlanInstance(); - populateAnalysePlan(planIndex++, plan, propertiesParameters); - analysePlans.add(plan); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find plan: " + name, eee); - } - } - } - } - } else { - if (log.isDebugEnabled()) { - log.debug("No last read properties, skip plans reloading"); - } - } - } - return this.analysePlans; - } - /** * Set plans list. * * @param plans plans to set */ - public void setAnalysePlans(List<AnalysePlan> plans) { - this.analysePlans = plans; - } + public abstract void setAnalysePlans(List<AnalysePlan> plans); /** * Retrun {@code true} if simulation is composed of independant plan only. * * @return {@code true} if all {@link AnalysePlan} are {@link AnalysePlanIndependent} */ - public boolean isIndependentPlan() { - boolean result = true; - for (AnalysePlan plan : getAnalysePlans()) { - if (!(plan instanceof AnalysePlanIndependent)) { - result = false; - break; - } - } - return result; - } + public abstract boolean isIndependentPlan(); /** * Clear plan list. */ - public void clearPlans() { - if (analysePlans != null) { - analysePlans.clear(); - } - } + public abstract void clearPlans(); /** * Add new rule to rules list. * @param rule rule to add */ - public void addRule(Rule rule) { - getRules().add(rule); - } + public abstract void addRule(Rule rule); /** * Remove a rule. @@ -787,86 +195,26 @@ * @param rule rule to remove * @return {@code true} if this list contained the specified element */ - public boolean removeRule(Rule rule) { - return getRules().remove(rule); - } + public abstract boolean removeRule(Rule rule); /** * Get parameters rules list. * * @return the rules */ - public List<Rule> getRules() { - if (rules == null) { - rules = new ArrayList<Rule>(); + public abstract List<Rule> getRules(); - if (propertiesParameters != 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; - } - - // rules - String[] ruleList = propertiesParameters.getProperty("rules", "").split(","); - int ruleIndex = 0; - for (String name : ruleList) { - if (name != null && !"".equals(name)) { - try { - Rule rule = RuleStorage.getRule(name).getNewRuleInstance(); - RuleHelper.populateRule(ruleIndex++, tx, rule, propertiesParameters); - rules.add(rule); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find rule: " + 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 rule reloading"); - } - } - } - return rules; - } - /** * Set simulation rules. * * @param rules rules to set */ - public void setRules(List<Rule> rules) { - this.rules = rules; - } + public abstract void setRules(List<Rule> rules); /** * Clear rule list. */ - public void clearRules() { - if (rules != null) { - rules.clear(); - } - } + public abstract void clearRules(); /** * Return if optimization sould be used. @@ -875,26 +223,14 @@ * * @return use optimization */ - public boolean getUseOptimization() { + public abstract boolean getUseOptimization(); - if (useOptimization == null) { - if (propertiesParameters != null) { - useOptimization = Boolean.valueOf(propertiesParameters.getProperty("useOptimization", "true")); - } else { - useOptimization = Boolean.TRUE; - } - } - return useOptimization.booleanValue(); - } - /** * Change use optimization parameter. * * @param useOptimization use optimization to set */ - public void setUseOptimization(boolean useOptimization) { - this.useOptimization = useOptimization; - } + public abstract void setUseOptimization(boolean useOptimization); /** * Return if statistic sould be used. @@ -903,57 +239,28 @@ * * @return use statistic */ - public boolean getUseStatistic() { + public abstract boolean getUseStatistic(); - if (useStatistic == null) { - if (propertiesParameters != null) { - useStatistic = Boolean.valueOf(propertiesParameters.getProperty("useStatistic", "false")); - } else { - useStatistic = Boolean.FALSE; - } - } - return this.useStatistic; - } - /** * Change use statistic property. * * @param useStatistic use statistic to set */ - public void setUseStatistic(boolean useStatistic) { - this.useStatistic = useStatistic; - } + public abstract void setUseStatistic(boolean useStatistic); /** * Get export names list. * * @return export names list */ - public List<String> getExportNames() { - if (exportNames == null) { - exportNames = new ArrayList<String>(); + public abstract List<String> getExportNames(); - if (propertiesParameters != null) { - // exports - String[] exportList = propertiesParameters.getProperty("exports", "").split(","); - for (String name : exportList) { - if (name != null && !"".equals(name)) { - exportNames.add(name); - } - } - } - } - return this.exportNames; - } - /** * Set export names list. * * @param exportNames export names list to set */ - public void setExportNames(List<String> exportNames) { - this.exportNames = exportNames; - } + public abstract void setExportNames(List<String> exportNames); /** * Get number of sensitivity simulation. @@ -962,30 +269,15 @@ * * @return the numberOfSensitivitySimulation */ - public int getNumberOfSensitivitySimulation() { + public abstract int getNumberOfSensitivitySimulation(); - if (numberOfSensitivitySimulation == null) { - - if (propertiesParameters != null) { - numberOfSensitivitySimulation = Integer.valueOf(propertiesParameters.getProperty( - "numberOfSensitivitySimulation", "-1")); - } else { - numberOfSensitivitySimulation = Integer.valueOf(-1); - } - } - - return numberOfSensitivitySimulation.intValue(); - } - /** * Set number of sensitivity simulation. * * @param numberOfSensitivitySimulation number of sensitivity simulation to set */ - public void setNumberOfSensitivitySimulation( - int numberOfSensitivitySimulation) { - this.numberOfSensitivitySimulation = numberOfSensitivitySimulation; - } + public abstract void setNumberOfSensitivitySimulation( + int numberOfSensitivitySimulation); /** * Get instanciated sensitivity calculator. @@ -994,38 +286,13 @@ * * @return the sensitivityCalculator */ - public SensitivityCalculator getSensitivityCalculator() { + public abstract SensitivityCalculator getSensitivityCalculator(); - if (sensitivityCalculator == null) { - if (propertiesParameters != null) { - String calculatorName = propertiesParameters - .getProperty("sensitivitycalculator"); - if (!StringUtils.isEmpty(calculatorName)) { - try { - SensitivityStorage sensitivityStorage = SensitivityStorage.getSensitivity(calculatorName); - sensitivityCalculator = sensitivityStorage.getNewSensitivityInstance(); - // 0 = only single sensitivity - populateSensitivityCalculator(0, sensitivityCalculator, propertiesParameters); - } catch (IsisFishException eee) { - sensitivityCalculator = null; - if (log.isWarnEnabled()) { - log.warn("Can't find sensitivity: " + sensitivityCalculator, eee); - } - } - } - } - } - - return sensitivityCalculator; - } - /** * @param sensitivityCalculator the sensitivityCalculator to set */ - public void setSensitivityCalculator( - SensitivityCalculator sensitivityCalculator) { - this.sensitivityCalculator = sensitivityCalculator; - } + public abstract void setSensitivityCalculator( + SensitivityCalculator sensitivityCalculator); /** * Return loaded sensitivity export. @@ -1034,154 +301,55 @@ * * @return the sensitivityExportNames */ - public List<SensitivityExport> getSensitivityExport() { - if (sensitivityExports == null) { - sensitivityExports = new ArrayList<SensitivityExport>(); + public abstract List<SensitivityExport> getSensitivityExport(); - if (propertiesParameters != 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().getDbResult(); - - if (tx == null) { - // not in simulation, create transaction - tx = getRegion().getStorage().beginTransaction(); - mustClose = true; - } - - // sensitivity export - String[] sensitivityExportList = propertiesParameters - .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, - propertiesParameters); - 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 sensitivityExports; - } - /** * @param sensitivityExport the sensitivityExportNames to set */ - public void setSensitivityExport(List<SensitivityExport> sensitivityExport) { - this.sensitivityExports = sensitivityExport; - } + public abstract void setSensitivityExport( + List<SensitivityExport> sensitivityExport); /** * Get use analyse plans property. * * @return use analyse plan. */ - public boolean getUseAnalysePlan() { + public abstract boolean getUseAnalysePlan(); - if (useAnalysePlan == null) { - - if (propertiesParameters != null) { - useAnalysePlan = Boolean.valueOf(propertiesParameters.getProperty("useAnalysePlan", "false")); - } else { - useAnalysePlan = Boolean.FALSE; - } - } - return this.useAnalysePlan; - } - /** * Set use analyse plans property. * * @param useAnalysePlan use analyse plan to set */ - public void setUseAnalysePlan(boolean useAnalysePlan) { - this.useAnalysePlan = useAnalysePlan; - } + public abstract void setUseAnalysePlan(boolean useAnalysePlan); /** * Get simulation number in analyse plan. * * @return simulation number in analyse plan */ - public int getAnalysePlanNumber() { + public abstract int getAnalysePlanNumber(); - if (analysePlanNumber == null) { - - if (propertiesParameters != null) { - analysePlanNumber = Integer.valueOf(propertiesParameters.getProperty("analysePlanNumber", "-1")); - } else { - analysePlanNumber = Integer.valueOf(-1); - } - } - - return this.analysePlanNumber.intValue(); - } - /** * Set simulation number in analyse plan. * * @param analysePlanNumber analyse plan number to set */ - public void setAnalysePlanNumber(int analysePlanNumber) { - this.analysePlanNumber = analysePlanNumber; - } + public abstract void setAnalysePlanNumber(int analysePlanNumber); /** * Get number of year to run to simulate. * * @return number of year */ - public int getNumberOfYear() { + public abstract int getNumberOfYear(); - if (numberOfYear == null) { - - if (propertiesParameters != null) { - numberOfYear = Integer.valueOf(propertiesParameters.getProperty("numberOfYear", "1")); - } else { - numberOfYear = Integer.valueOf(1); - } - } - return numberOfYear.intValue(); - } - /** * Set number of year to run to simulate. * * @param numberOfYear number of year to set */ - public void setNumberOfYear(int numberOfYear) { - this.numberOfYear = numberOfYear; - } + public abstract void setNumberOfYear(int numberOfYear); /** * Get use prescript. @@ -1190,143 +358,70 @@ * * @return Returns the usePreScript. */ - public boolean getUsePreScript() { + public abstract boolean getUsePreScript(); - if (usePreScript == null) { - - if (propertiesParameters != null) { - usePreScript = Boolean.valueOf(propertiesParameters.getProperty("usePreScript", "false")); - } else { - usePreScript = Boolean.FALSE; - } - } - - return usePreScript.booleanValue(); - } - /** * Set use prescript property * * @param usePreScript use preScript to set */ - public void setUsePreScript(boolean usePreScript) { - this.usePreScript = usePreScript; - } + public abstract void setUsePreScript(boolean usePreScript); /** * Get prescript content. * * @return preScript content */ - public String getPreScript() { + public abstract String getPreScript(); - if (preScript == null) { - - if (propertiesParameters != null) { - preScript = propertiesParameters.getProperty("preScript", ""); - } else { - preScript = ""; - } - } - - return preScript; - } - /** * Set pre script content. * * @param preScript prescript content */ - public void setPreScript(String preScript) { - this.preScript = preScript; - } + public abstract void setPreScript(String preScript); /** * Get region name. * * @return region name */ - public String getRegionName() { + public abstract String getRegionName(); - if (regionName == null) { - if (propertiesParameters != null) { - regionName = propertiesParameters.getProperty("regionName", ""); - } else { - // defaut value - regionName = ""; - } - } - - return regionName; - } - /** * Set region name. * * @param regionName region name to set */ - public void setRegionName(String regionName) { - this.regionName = regionName; - } + public abstract void setRegionName(String regionName); /** * Set simulator name. * * @return simulator name. */ - public String getSimulatorName() { + public abstract String getSimulatorName(); - if (simulatorName == null) { - if (propertiesParameters != null) { - simulatorName = propertiesParameters.getProperty( - "simulatorName", "DefaultSimulator.java"); - } else { - simulatorName = "DefaultSimulator.java"; - } - } - return simulatorName; - } - /** * Set simulator name. * * @param simulatorName simulator name to set */ - public void setSimulatorName(String simulatorName) { - this.simulatorName = simulatorName; - } + public abstract void setSimulatorName(String simulatorName); /** * Get enabled result names list. * * @return enabled result names list */ - public Collection<String> getResultEnabled() { + public abstract Collection<String> getResultEnabled(); - if (resultEnabled == null) { - - resultEnabled = new LinkedList<String>(); - - if (propertiesParameters != null) { - String[] resultList = propertiesParameters.getProperty("resultNames", "").split(","); - for (String name : resultList) { - if (name != null && !"".equals(name)) { - resultEnabled.add(name); - } - } - } - } - return resultEnabled; - } - /** * Set enabled result names list. * * @param resultEnabled enabled result names list */ - public void setResultEnabled(Collection<String> resultEnabled) { - this.resultEnabled = resultEnabled; - } + public abstract void setResultEnabled(Collection<String> resultEnabled); /** * Get tag values. @@ -1335,33 +430,14 @@ * * @return Returns the tagValue. */ - public Map<String, String> getTagValue() { + public abstract Map<String, String> getTagValue(); - if (tagValue == null) { - tagValue = new LinkedHashMap<String, String>(); - - if (propertiesParameters != null) { - for (Object k : propertiesParameters.keySet()) { - if (k.toString().startsWith("tagValue.")) { - String key = k.toString().substring("tagValue.".length()); - String value = propertiesParameters.getProperty(k.toString()); - getTagValue().put(key, value); - } - } - } - } - - return tagValue; - } - /** * Set tag values. * * @param tagValue tagValues to set. */ - public void setTagValue(Map<String, String> tagValue) { - this.tagValue = tagValue; - } + public abstract void setTagValue(Map<String, String> tagValue); /** * Get simulator log level. @@ -1370,32 +446,14 @@ * * @return simualtor log level */ - public String getSimulLogLevel() { + public abstract String getSimulLogLevel(); - if (simulLogLevel == null) { - - if (propertiesParameters != null) { - simulLogLevel = propertiesParameters.getProperty("simulLogLevel", "info"); - } else { - simulLogLevel = "info"; - } - } - - return simulLogLevel; - } - /** * Set simulator log level. * * @param logLevel simulator log level */ - public void setSimulLogLevel(String logLevel) { - if (log.isDebugEnabled()) { - log.debug(_("isisfish.params.changeLogLev", simulLogLevel, - logLevel)); - } - this.simulLogLevel = logLevel; - } + public abstract void setSimulLogLevel(String logLevel); /** * Get script log level. @@ -1404,32 +462,14 @@ * * @return script log level */ - public String getScriptLogLevel() { + public abstract String getScriptLogLevel(); - if (scriptLogLevel == null) { - if (propertiesParameters != null) { - scriptLogLevel = propertiesParameters.getProperty( - "scriptLogLevel", "info"); - } else { - scriptLogLevel = "info"; - } - } - - return scriptLogLevel; - } - /** * Set script log level. * * @param logLevel script log level */ - public void setScriptLogLevel(String logLevel) { - if (log.isDebugEnabled()) { - log.debug(_("isisfish.params.changeLogLev", scriptLogLevel, - logLevel)); - } - this.scriptLogLevel = logLevel; - } + public abstract void setScriptLogLevel(String logLevel); /** * Get librairies log level. @@ -1438,78 +478,38 @@ * * @return librairies log level */ - public String getLibLogLevel() { - if (libLogLevel == null) { - if (propertiesParameters != null) { - libLogLevel = propertiesParameters.getProperty("libLogLevel", - "error"); - } else { - libLogLevel = "info"; - } - } + public abstract String getLibLogLevel(); - return libLogLevel; - } - /** * Set lib log level. * * @param logLevel */ - public void setLibLogLevel(String logLevel) { - if (log.isDebugEnabled()) { - log.debug(_("isisfish.params.changeLogLev", libLogLevel, logLevel)); - } - this.libLogLevel = logLevel; - } + public abstract void setLibLogLevel(String logLevel); - public boolean isSimulErrorLevel() { - return "error".equals(simulLogLevel); - } + public abstract boolean isSimulErrorLevel(); - public boolean isSimulWarnLevel() { - return "warn".equals(simulLogLevel); - } + public abstract boolean isSimulWarnLevel(); - public boolean isSimulInfoLevel() { - return "info".equals(simulLogLevel); - } + public abstract boolean isSimulInfoLevel(); - public boolean isSimulDebugLevel() { - return "debug".equals(simulLogLevel); - } + public abstract boolean isSimulDebugLevel(); - public boolean isScriptErrorLevel() { - return "error".equals(scriptLogLevel); - } + public abstract boolean isScriptErrorLevel(); - public boolean isScriptWarnLevel() { - return "warn".equals(scriptLogLevel); - } + public abstract boolean isScriptWarnLevel(); - public boolean isScriptInfoLevel() { - return "info".equals(scriptLogLevel); - } + public abstract boolean isScriptInfoLevel(); - public boolean isScriptDebugLevel() { - return "debug".equals(scriptLogLevel); - } + public abstract boolean isScriptDebugLevel(); - public boolean isLibErrorLevel() { - return "error".equals(libLogLevel); - } + public abstract boolean isLibErrorLevel(); - public boolean isLibWarnLevel() { - return "warn".equals(libLogLevel); - } + public abstract boolean isLibWarnLevel(); - public boolean isLibInfoLevel() { - return "info".equals(libLogLevel); - } + public abstract boolean isLibInfoLevel(); - public boolean isLibDebugLevel() { - return "debug".equals(libLogLevel); - } + public abstract boolean isLibDebugLevel(); /** * A copy instance of SimulationParameter. @@ -1519,63 +519,8 @@ * * @return a copy of this instance */ - public SimulationParameter copy() { - SimulationParameter result = new SimulationParameter(); + public abstract SimulationParameter copy(); - if (propertiesParameters != null) { - result.propertiesParameters = new SortedProperties(); - // I think that iteration work better than parameters in contructor - result.propertiesParameters.putAll(propertiesParameters); - } - - // still needed to be copied, if there is no propertiesParameters - result.isisFishVersion = getIsisFishVersion(); - result.description = getDescription(); - result.regionName = getRegionName(); - result.numberOfYear = getNumberOfYear(); - result.simulatorName = getSimulatorName(); - result.useOptimization = getUseOptimization(); - result.useStatistic = getUseStatistic(); - result.usePreScript = getUsePreScript(); - result.preScript = getPreScript(); - result.useAnalysePlan = getUseAnalysePlan(); - result.analysePlanNumber = getAnalysePlanNumber(); - if (exportNames != null) { - result.exportNames = new LinkedList<String>(exportNames); - } - if (strategies != null) { - result.strategies = new LinkedList<Strategy>(strategies); - } - if (populations != null) { - result.populations = new LinkedList<Population>(populations); - } - if (rules != null) { - result.rules = new LinkedList<Rule>(rules); - } - if (analysePlans != null) { - result.analysePlans = new LinkedList<AnalysePlan>(analysePlans); - } - if (resultEnabled != null) { - result.resultEnabled = new LinkedList<String>(resultEnabled); - } - if (numbers != null) { - result.numbers = new HashMap<Population, MatrixND>(numbers); - } - if (tagValue != null) { - result.tagValue = new HashMap<String, String>(tagValue); - } - result.simulLogLevel = getSimulLogLevel(); - result.scriptLogLevel = getScriptLogLevel(); - result.libLogLevel = getLibLogLevel(); - result.numberOfSensitivitySimulation = getNumberOfSensitivitySimulation(); - if (sensitivityExports != null) { - result.sensitivityExports = new LinkedList<SensitivityExport>(sensitivityExports); - } - result.sensitivityCalculator = sensitivityCalculator; - - return result; - } - /** * Make a deep copy of current parameters. * @@ -1584,112 +529,15 @@ * * @return new parameters instance */ - public SimulationParameter deepCopy() { - Properties props = toProperties(); - SimulationParameter newInstance = new SimulationParameter(); - newInstance.fromProperties(props); - return newInstance; - } + public abstract SimulationParameter deepCopy(); /** * The toString() method call getters. * * So make instances of rules/export/plans... */ - @Override - public String toString() { - StringBuffer result = new StringBuffer(); - result.append( - _("isisfish.params.toString.simulation.done", - getIsisFishVersion())).append('\n'); - result.append("--------------------\n"); - result.append(getDescription()).append('\n'); - result.append("--------------------\n"); + public abstract String toString(); - if (getUseAnalysePlan()) { - result.append(_("isisfish.params.toString.plan.number", - getAnalysePlanNumber())); - } - - RegionStorage region = getRegion(); - result.append(_("isisfish.params.toString.fishery", region.getName())); - result.append(_("isisfish.params.toString.number.years", - getNumberOfYear())); - - // startegies - List<Strategy> strs = getStrategies(); - result.append(_("isisfish.params.toString.strategies")); - String sep = ""; - for (Strategy str : strs) { - result.append(sep).append(str.getName()); - sep = ","; - } - result.append("\n\n"); - - // populations - result.append(_("isisfish.params.toString.populations")); - sep = ""; - for (Population pop : getPopulations()) { - result.append(sep).append(pop.getName()); - sep = ","; - } - result.append("\n\n"); - - // rules - for (Rule rule : getRules()) { - String name = RuleStorage.getName(rule); - String param = ""; - try { - param = RuleStorage.getParamAsString(rule); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't convert rule parameter to string for " - + name, eee); - } - } - result.append(_("isisfish.params.toString.rule", name)); - result.append('\n'); - result.append(param); - result.append("\n"); - - } - result.append("\n\n"); - - // analyse plans - for (AnalysePlan plan : getAnalysePlans()) { - String name = RuleStorage.getName(plan); - String param = ""; - try { - param = AnalysePlanStorage.getParamAsString(plan); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't convert plan parameter to string for " - + name, eee); - } - } - result.append(_("isisfish.params.toString.plan", name)); - result.append('\n'); - result.append(param); - result.append('\n'); - - } - result.append('\n'); - result.append(_("isisfish.params.toString.script.presimulation")) - .append(":\n"); - result.append(getPreScript()); - result.append('\n'); - result.append(_("isisfish.params.toString.simul.logger.level", - simulLogLevel)); - result.append('\n'); - result.append(_("isisfish.params.toString.script.logger.level", - scriptLogLevel)); - result.append('\n'); - result.append(_("isisfish.params.toString.lib.logger.level", - libLogLevel)); - result.append('\n'); - return result.toString(); - } - /** * Permet de convertir l'objet SimulationParameter en un objet Properties * Cela permet de le stocker facilement sur le disque. @@ -1706,195 +554,15 @@ * @return L'objet Properties representant les parametres * @see #fromProperties(File, Properties) */ - public Properties toProperties() { - Properties result = new SortedProperties(); + public abstract Properties toProperties(); - result.setProperty("isisFishVersion", getIsisFishVersion()); - result.setProperty("description", getDescription()); - result.setProperty("regionName", getRegionName()); - result.setProperty("numberOfYear", String.valueOf(getNumberOfYear())); - result.setProperty("simulatorName", getSimulatorName()); - result.setProperty("useOptimization", String.valueOf(getUseOptimization())); - result.setProperty("useStatistic", String.valueOf(getUseStatistic())); - - // strategies - if (strategies != null) { - String strategyList = ""; - for (Strategy str : getStrategies()) { - strategyList += str.getName() + ","; - } - result.setProperty("strategies", StringUtil.substring(strategyList, 0, -1)); - } else { - if (propertiesParameters != null - && propertiesParameters.containsKey("strategies")) { - result.setProperty("strategies", propertiesParameters.getProperty("strategies")); - } - } - - // populations - if (populations != null) { - String populationList = ""; - for (Population pop : getPopulations()) { - populationList += pop.getName() + ","; - MatrixND number = getNumberOf(pop); - String numberAsString = String.valueOf(number.toList()); - result.setProperty("population." + pop.getName() + ".number", numberAsString); - } - result.setProperty("populations", StringUtil.substring( - populationList, 0, -1)); - } else { - if (propertiesParameters != null - && propertiesParameters.containsKey("populations")) { - result.setProperty("populations", propertiesParameters.getProperty("populations")); - for (String key : propertiesParameters.stringPropertyNames()) { - if (key.startsWith("population.")) { - result.setProperty(key, propertiesParameters.getProperty(key)); - } - } - } - } - - // rules - if (rules != null) { - String ruleList = ""; - int ruleIndex = 0; - for (Rule rule : getRules()) { - ruleList += RuleStorage.getName(rule) + ","; - Properties ruleProp = ruleParametertoProperties(ruleIndex++, rule); - result.putAll(ruleProp); - } - result.setProperty("rules", ruleList); - } else { - if (propertiesParameters != null - && propertiesParameters.containsKey("rules")) { - result.setProperty("rules", propertiesParameters - .getProperty("rules")); - for (String key : propertiesParameters.stringPropertyNames()) { - if (key.startsWith("rule.")) { - result.setProperty(key, propertiesParameters - .getProperty(key)); - } - } - } - } - - // anaylyse plans - if (analysePlans != null) { - String planList = ""; - int planIndex = 0; - for (AnalysePlan plan : getAnalysePlans()) { - planList += AnalysePlanStorage.getName(plan) + ","; - Properties planProp = planParametertoProperties(planIndex++, plan); - result.putAll(planProp); - } - result.setProperty("plans", planList); - } else { - if (propertiesParameters != null - && propertiesParameters.containsKey("plans")) { - result.setProperty("plans", propertiesParameters - .getProperty("plans")); - for (String key : propertiesParameters.stringPropertyNames()) { - if (key.startsWith("plan.")) { - result.setProperty(key, propertiesParameters.getProperty(key)); - } - } - } - } - - // export names - String exportList = ""; - for (String export : getExportNames()) { - exportList += export + ","; - - } - result.setProperty("exports", exportList); - - // number of sensitivity simulation - result.setProperty("numberOfSensitivitySimulation", String - .valueOf(getNumberOfSensitivitySimulation())); - - // calculator name - if (sensitivityCalculator != null) { - String calculatorName = SensitivityStorage - .getName(getSensitivityCalculator()); - result.setProperty("sensitivitycalculator", calculatorName); - - // calculator parameter - Properties calculatorParams = sensitivityCalculatorParametertoProperties( - 0, getSensitivityCalculator()); - result.putAll(calculatorParams); - } else { - if (propertiesParameters != null - && propertiesParameters.containsKey("sensitivitycalculator")) { - result.setProperty("sensitivitycalculator", - propertiesParameters.getProperty("sensitivitycalculator")); - for (String key : propertiesParameters.stringPropertyNames()) { - if (key.startsWith("sensitivity.")) { - result.setProperty(key, propertiesParameters.getProperty(key)); - } - } - } - } - - // sensitivity exports - if (sensitivityExports != null) { - String sensitivityExportList = ""; - int sensitivityExportIndex = 0; - for (SensitivityExport sensitivityExport : getSensitivityExport()) { - sensitivityExportList += SensitivityExportStorage - .getName(sensitivityExport) + ","; - Properties exportProp = sensitivityExportParametertoProperties( - sensitivityExportIndex++, sensitivityExport); - result.putAll(exportProp); - } - result.setProperty("sensitivityexports", sensitivityExportList); - } else { - if (propertiesParameters != null - && propertiesParameters.containsKey("sensitivityexports")) { - result.setProperty("sensitivityexports", propertiesParameters - .getProperty("sensitivityexports")); - for (String key : propertiesParameters.stringPropertyNames()) { - if (key.startsWith("sensitivityexport.")) { - result.setProperty(key, propertiesParameters.getProperty(key)); - } - } - } - } - - result.setProperty("usePreScript", String.valueOf(getUsePreScript())); - result.setProperty("preScript", getPreScript()); - result.setProperty("useAnalysePlan", String.valueOf(getUseAnalysePlan())); - result.setProperty("analysePlanNumber", String.valueOf(getAnalysePlanNumber())); - - String resultList = ""; - for (String r : getResultEnabled()) { - resultList += r + ","; - } - result.setProperty("resultNames", resultList); - - for (Map.Entry<String, String> e : getTagValue().entrySet()) { - result.setProperty("tagValue." + e.getKey(), e.getValue()); - } - - result.setProperty("simulLogLevel", getSimulLogLevel()); - result.setProperty("scriptLogLevel", getScriptLogLevel()); - result.setProperty("libLogLevel", getLibLogLevel()); - return result; - } - /** * Load properties from file. * * @param props property to read */ - public void fromProperties(Properties props) { + public abstract void fromProperties(Properties props); - // save properties (use full to read again parameter) - // for exports, or rules.... - this.propertiesParameters = props; - - } - /** * Reload parameters du to context change. * @@ -1904,59 +572,6 @@ * * @throws TopiaException */ - public void reloadContextParameters() throws TopiaException { + public abstract void reloadContextParameters() throws TopiaException; - // 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; - } - - // reload rules - if (log.isDebugEnabled()) { - log.debug("Reloading rules"); - } - for (Rule rule : getRules()) { - try { - for (Field field : rule.getClass().getFields()) { - // le champ ne doit pas être privé - if (Modifier.isPublic(field.getModifiers())) { - // si le type est topia entity (ou sous classe) - if (TopiaEntity.class.isAssignableFrom(field.getType())) { - TopiaEntity entity = (TopiaEntity) field.get(rule); - // il est possible que les parametres soient null - // dans ce cas, il ne faut pas essayer de les recharger - if (entity != null) { - // reloading - TopiaEntity newEntity = tx.findByTopiaId(entity - .getTopiaId()); - field.set(rule, newEntity); - } - } - } - } - } catch (IllegalArgumentException e) { - if (log.isErrorEnabled()) { - log.error("Can't refresh rule field", e); - } - } catch (IllegalAccessException e) { - if (log.isErrorEnabled()) { - log.error("Can't access rule field", e); - } - } - } - - // si la transaction a été ouverte (pas dans une simulation) - // on la referme - if (mustClose) { - tx.commitTransaction(); - tx.closeContext(); - } - } -} +} \ No newline at end of file
participants (1)
-
chatellier@users.labs.libre-entreprise.org