Author: chatellier Date: 2011-06-06 14:14:32 +0000 (Mon, 06 Jun 2011) New Revision: 3349 Log: Fill factor nominal values before calling sensitivity calculator. Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2011-06-05 14:34:08 UTC (rev 3348) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2011-06-06 14:14:32 UTC (rev 3349) @@ -47,6 +47,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.mutable.MutableInt; @@ -56,6 +57,7 @@ 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.FileUtil; import org.nuiton.util.ListenerSet; import org.nuiton.util.ObjectUtil; @@ -436,7 +438,7 @@ // to get original database value (Nominal value) RegionStorage regionStorage = RegionStorage.getRegion(param.getRegionName()); TopiaContext context = regionStorage.getStorage().beginTransaction(); - sensitivitycalculator.setTopiaContext(context); + fillDesignPlanNominalValue(context, designPlan); // Sensitivity scenario returned contains same factor references // as input design plan. Factor group are still present @@ -510,6 +512,34 @@ } } + /** + * Explore design plan factor tree, and set factor nominal value + * for each factor. + * + * @param context opened database context + * @param designPlan design plan + */ + protected void fillDesignPlanNominalValue(TopiaContext context, DesignPlan designPlan) { + // take care only on first level of factor tree + for (Factor factor : designPlan.getFactors()) { + // get nominal value + String path = factor.getPath(); + if (StringUtils.contains(path, "#")) { + String topiaId = path.substring(0, path.lastIndexOf("#")); + String propertyName=path.substring(path.lastIndexOf("#") + 1); + try { + TopiaEntity entity = context.findByTopiaId(topiaId); + Object result = BeanUtils.getProperty(entity, propertyName); + factor.setNominalValue(result); + } catch (Exception ex) { + if (log.isErrorEnabled()) { + log.error("An error occurred while trying to get nominal value", ex); + } + } + } + } + } + /** Permet de manipuler un int entre plusieurs appele de methodes recursive. */ public static class Counter { protected int counter = 0;