Author: chatellier Date: 2009-09-11 09:27:25 +0000 (Fri, 11 Sep 2009) New Revision: 2597 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java Log: Load rule 'on demand' (not on simulation parameter reloading) 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-11 09:25:27 UTC (rev 2596) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2009-09-11 09:27:25 UTC (rev 2597) @@ -1,4 +1,5 @@ -/* *##% Copyright (C) 2006 - 2009 Code Lutin, Cédric Pineau, Benjamin Poussin +/* *##% + * Copyright (C) 2006 - 2009 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 @@ -64,7 +65,7 @@ import fr.ifremer.isisfish.util.ConverterUtil; /** - * Contains all parameter for one simulation. + * Contains all parameters for one simulation. * * Created: 10 janv. 2006 17:03:37 * @@ -87,7 +88,7 @@ * @deprecated remove this hack */ public static String NUMBER_OF_SENSITIVITY_SIMULATION = "numberOfSensitivitySimulation"; - + /** * Isis-fish version that permit to do the simulation, must be set just * before simulation by simulator. @@ -359,8 +360,8 @@ // when reading new properties files, clean some information // to force re instantion on next call - // @see { sensitivityExports = null; + rules = null; isisFishVersion = props.getProperty("isisFishVersion", ""); description = props.getProperty("description", ""); @@ -446,23 +447,6 @@ log.warn("Can't get PopulationDAO", eee1); } } - - // rules - String[] ruleList = props.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, props); - getRules().add(rule); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find rule: " + name, eee); - } - } - } - } tx.commitTransaction(); @@ -579,7 +563,7 @@ if (log.isDebugEnabled()) { log.debug("Reloading rules"); } - for (Rule rule : rules) { + for (Rule rule : getRules()) { try { for (Field field : rule.getClass().getFields()) { // le champ ne doit pas être privé @@ -915,13 +899,62 @@ } /** + * Get parameters rule list. * @return Returns the rules. */ public List<Rule> getRules() { - if (rules == null) { + if (rules == null || rules.isEmpty()) { rules = new ArrayList<Rule>(); + + 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; + } + + // rules + String[] ruleList = lastReadParameters.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, lastReadParameters); + 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 this.rules; + return rules; } /**