Author: chatellier Date: 2009-06-12 08:49:37 +0000 (Fri, 12 Jun 2009) New Revision: 2367 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java Log: Load rules parameters in current simulation context. Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java 2009-06-10 15:24:47 UTC (rev 2366) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/rule/RuleHelper.java 2009-06-12 08:49:37 UTC (rev 2367) @@ -25,9 +25,9 @@ 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.RegionStorage; import fr.ifremer.isisfish.datastore.RuleStorage; import fr.ifremer.isisfish.util.ConverterUtil; @@ -57,14 +57,14 @@ * @param ruleIndex l'index de la regle * @param rule la regle dont les parametres doivent etre lu depuis les * proprietes - * @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 la regle */ - public static void populateRule(int ruleIndex, RegionStorage region, Rule rule, Properties props) { - ConvertUtilsBean beanUtils = ConverterUtil.getConverter(region.getStorage()); + public static void populateRule(int ruleIndex, TopiaContext context, Rule rule, Properties props) { + ConvertUtilsBean beanUtils = ConverterUtil.getConverter(context); String ruleName = RuleStorage.getName(rule); String paramTag = "rule." + ruleIndex + ".parameter."; - + for (Map.Entry<String, Class> entry : RuleStorage.getParameterNames(rule).entrySet()) { String propName = entry.getKey(); Class type = entry.getValue(); @@ -85,7 +85,4 @@ } } } - } - - 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-06-10 15:24:47 UTC (rev 2366) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameter.java 2009-06-12 08:49:37 UTC (rev 2367) @@ -362,8 +362,19 @@ } try { - TopiaContext tx = getRegion().getStorage().beginTransaction(); + // 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; + } + // strategies try { StrategyDAO strategyDAO = IsisFishDAOHelper.getStrategyDAO(tx); String[] strategyList = props.getProperty("strategies", "") @@ -386,6 +397,7 @@ } } + // populations try { PopulationDAO populationDAO = IsisFishDAOHelper .getPopulationDAO(tx); @@ -418,30 +430,37 @@ } } + // 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(); - tx.closeContext(); + + // 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); } } - 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++, getRegion(), rule, props); - getRules().add(rule); - } catch (IsisFishException eee) { - if (log.isWarnEnabled()) { - log.warn("Can't find rule: " + name, eee); - } - } - } - } - + // analyse plan String[] planList = props.getProperty("plans", "").split(","); int planIndex = 0; for (String name : planList) { @@ -458,6 +477,7 @@ } } + // exports String[] exportList = props.getProperty("exports", "").split(","); int exportIndex = 0; for (String name : exportList) {