r3937 - in branches/4.0.1/src/main: java/fr/ifremer/isisfish/simulator java/fr/ifremer/isisfish/simulator/launcher resources/i18n
Author: echatellier Date: 2014-04-06 18:10:33 +0200 (Sun, 06 Apr 2014) New Revision: 3937 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3937 Log: refs #4803: Gestion des exports et observation des optimisations Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-04-06 16:08:21 UTC (rev 3936) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/ResultManager.java 2014-04-06 16:10:33 UTC (rev 3937) @@ -31,6 +31,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; @@ -39,6 +40,7 @@ import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.datastore.ExportStorage; +import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.rule.Rule; @@ -166,6 +168,16 @@ } } + // optimization export + Map<Export, Observation> optimizationExportsObservations = param.getOptimizationExportsObservations(); + if (optimizationExportsObservations != null) { + for (Export export : optimizationExportsObservations.keySet()) { + for (String resultName : export.getNecessaryResult()) { + enabledResult.add(resultName); + } + } + } + log.info("Enabled result: " + enabledResult); } boolean result = enabledResult.contains(name); Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java 2014-04-06 16:08:21 UTC (rev 3936) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationExportResultWrapper.java 2014-04-06 16:10:33 UTC (rev 3937) @@ -26,10 +26,13 @@ package fr.ifremer.isisfish.simulator; import static org.nuiton.i18n.I18n.t; + import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -94,7 +97,17 @@ if (sensitivityExports != null) { allExports.addAll(sensitivityExports); } - + + // third, optimization export + Set<Export> optimizationExports = parameters.getOptimizationExportsObservations().keySet(); + for (Export export : optimizationExports) { + // exclude export already added with regular exports + String exportName = ExportStorage.getName(export); + if (parameters.getExportNames() == null || !parameters.getExportNames().contains(exportName)) { + allExports.add(export); + } + } + // make exports if (!allExports.isEmpty()) { control.setText(t("isisfish.message.export.export")); Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-04-06 16:08:21 UTC (rev 3936) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/SimulationParameterImpl.java 2014-04-06 16:10:33 UTC (rev 3937) @@ -54,6 +54,7 @@ import fr.ifremer.isisfish.IsisConfig; import fr.ifremer.isisfish.IsisFishDAOHelper; import fr.ifremer.isisfish.IsisFishException; +import fr.ifremer.isisfish.datastore.ExportStorage; import fr.ifremer.isisfish.datastore.ObjectiveStorage; import fr.ifremer.isisfish.datastore.OptimizationStorage; import fr.ifremer.isisfish.datastore.RegionStorage; @@ -885,7 +886,7 @@ try { OptimizationStorage optimizationStorage = OptimizationStorage.getOptimization(optimizationName); optimization = optimizationStorage.getNewInstance(); - // 0 = only single sensitivity + // 0 = only single optimization StorageHelper.populateStorageParams(0, getRegion().getStorage(), optimization, propertiesParameters, "optimization"); } catch (IsisFishException eee) { @@ -915,7 +916,7 @@ try { ObjectiveStorage objectiveStorage = ObjectiveStorage.getObjective(objectiveName); objective = objectiveStorage.getNewInstance(); - // 0 = only single sensitivity + // 0 = only single objective StorageHelper.populateStorageParams(0, getRegion().getStorage(), objective, propertiesParameters, "objective"); } catch (IsisFishException eee) { @@ -940,8 +941,54 @@ if (optimizationExportsObservations == null) { // must be sorted for ui (LinkedHashMap) optimizationExportsObservations = new LinkedHashMap<>(); - - // FIXME echatellier 20140404 finish restore parameters + + 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[] optimizationExportList = propertiesParameters.getProperty("optimizationexports", "").split(","); + int optimizationExportIndex = 0; + for (String name : optimizationExportList) { + if (name != null && !"".equals(name)) { + try { + Export export = ExportStorage.getExport(name).getNewInstance(); + Observation observation = null; + String observationId = propertiesParameters.getProperty("optimizationobservation." + optimizationExportIndex); + if (StringUtils.isNotBlank(observationId)) { + observation = (Observation)tx.findByTopiaId(observationId); + } + optimizationExportsObservations.put(export, observation); + } catch (IsisFishException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't find rule: " + name, eee); + } + } + } + optimizationExportIndex++; + } + + // si la transaction a été ouverte (pas dans une simulation) + // on la referme + if (mustClose) { + tx.closeContext(); + } + } catch (TopiaException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't get TopiaContext", eee); + } + } + } } return optimizationExportsObservations; @@ -1478,6 +1525,9 @@ if (optimization != null) { result.optimization = optimization; } + if (optimizationExportsObservations != null) { + result.optimizationExportsObservations = new LinkedHashMap<Export, Observation>(optimizationExportsObservations); + } if (resultEnabled != null) { result.resultEnabled = new LinkedList<String>(resultEnabled); } @@ -1629,7 +1679,20 @@ result.append(param); result.append('\n'); } + + for (Map.Entry<Export, Observation> exportObservationEntry : getOptimizationExportsObservations().entrySet()) { + Export export = exportObservationEntry.getKey(); + Observation observation = exportObservationEntry.getValue(); + String name = ExportStorage.getName(export); + result.append(t("isisfish.params.toString.optimizationExport", name)); + result.append('\n'); + if (observation != null) { + result.append(t("isisfish.params.toString.optimizationObservation", observation.getName())); + result.append('\n'); + } + } + result.append('\n'); result.append(t("isisfish.params.toString.script.generatedpresimulation")) .append(":\n"); @@ -1791,6 +1854,35 @@ } } + // optimization export and observations + if (optimizationExportsObservations != null) { + String optimizationExportsList = ""; + int optimizationExportIndex = 0; + for (Map.Entry<Export, Observation> exportObservationEntry : optimizationExportsObservations.entrySet()) { + Export export = exportObservationEntry.getKey(); + optimizationExportsList += ExportStorage.getName(export) + ","; + + // add in props observation id export index + Observation observation = exportObservationEntry.getValue(); + if (observation != null) { + result.setProperty("optimizationobservation." + optimizationExportIndex, observation.getTopiaId()); + } + optimizationExportIndex++; + } + result.setProperty("optimizationexports", optimizationExportsList); + } else { + if (propertiesParameters != null) { + if (propertiesParameters.containsKey("optimizationexports")) { + result.setProperty("optimizationexports", propertiesParameters.getProperty("optimizationexports")); + } + for (String key : propertiesParameters.stringPropertyNames()) { + if (key.startsWith("optimizationobservation.")) { + result.setProperty(key, propertiesParameters.getProperty(key)); + } + } + } + } + // export names String exportList = ""; for (String export : getExportNames()) { @@ -1854,8 +1946,6 @@ // sensitivity params result.setProperty("sensitivityAnalysisOnlyKeepFirst", String.valueOf(isSensitivityAnalysisOnlyKeepFirst())); - // FIXME echatellier 20140404 store optimization params - result.setProperty("generatedPreScript", getGeneratedPreScript()); result.setProperty("usePreScript", String.valueOf(getUsePreScript())); result.setProperty("preScript", getPreScript()); Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2014-04-06 16:08:21 UTC (rev 3936) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationService.java 2014-04-06 16:10:33 UTC (rev 3937) @@ -25,7 +25,6 @@ package fr.ifremer.isisfish.simulator.launcher; -import fr.ifremer.isisfish.simulator.sensitivity.FactorHelper; import static org.nuiton.i18n.I18n.t; import java.beans.PropertyChangeListener; @@ -46,12 +45,8 @@ import java.util.TreeSet; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.beanutils.ConvertUtils; -import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -59,7 +54,6 @@ import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.MatrixND; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; @@ -79,10 +73,10 @@ import fr.ifremer.isisfish.datastore.SimulationPlanStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; +import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.mexico.MexicoHelper; import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.rule.RuleHelper; import fr.ifremer.isisfish.simulator.SimulationControl; import fr.ifremer.isisfish.simulator.SimulationException; import fr.ifremer.isisfish.simulator.SimulationParameter; @@ -90,16 +84,13 @@ import fr.ifremer.isisfish.simulator.sensitivity.DesignPlan; import fr.ifremer.isisfish.simulator.sensitivity.Domain; import fr.ifremer.isisfish.simulator.sensitivity.Factor; -import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; +import fr.ifremer.isisfish.simulator.sensitivity.FactorHelper; import fr.ifremer.isisfish.simulator.sensitivity.Scenario; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityAnalysis; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityScenarios; import fr.ifremer.isisfish.simulator.sensitivity.SensitivityUtils; -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.util.CompileHelper; -import fr.ifremer.isisfish.util.ConverterUtil; -import java.util.concurrent.atomic.AtomicInteger; /** * Cette classe est responsable de conservation de toutes les simulations faites @@ -809,6 +800,22 @@ + File.separator + name)); } + // copie des export d'optimisation + for (Export export : param.getOptimizationExportsObservations().keySet()) { + String name = ExportStorage.getName(export); + if (!param.getExportNames().contains(name)) { + // duplicated code + name = name.endsWith(".java") ? name : name + ".java"; + File exportFile = new File(ExportStorage.getExportDirectory(), name); + if (!exportFile.isFile()) { + exportFile = new File(ExportStorage.getCommunityExportDirectory(), name); + } + FileUtils.copyFile(exportFile, + new File(tmpDirectory, ExportStorage.EXPORT_PATH + + File.separator + name)); + } + } + // copie de tous les scripts a utiliser // les script officiel prevalent sur les scripts communautés FileUtil.copyRecursively(ScriptStorage.getCommunityScriptDirectory(), Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2014-04-06 16:08:21 UTC (rev 3936) +++ branches/4.0.1/src/main/resources/i18n/isis-fish_en_GB.properties 2014-04-06 16:10:33 UTC (rev 3937) @@ -685,6 +685,8 @@ isisfish.params.toString.number.years=Number of years\: %1$s\n\n isisfish.params.toString.objective= isisfish.params.toString.optimization= +isisfish.params.toString.optimizationExport= +isisfish.params.toString.optimizationObservation= isisfish.params.toString.plan=Plan\: %1$s isisfish.params.toString.plan.number=Simulation plan sequence number\: %1$s\n\n isisfish.params.toString.populations=Populations \: Modified: branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-04-06 16:08:21 UTC (rev 3936) +++ branches/4.0.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2014-04-06 16:10:33 UTC (rev 3937) @@ -679,15 +679,17 @@ isisfish.params.simulationName=Nom de la simulation isisfish.params.stategiesAndPopulations=Stratégies et populations isisfish.params.title=Paramètres -isisfish.params.toString.fishery=Pêcherie\: %1$s\n\n -isisfish.params.toString.lib.logger.level=niveau du logger de librairies \: %1$s -isisfish.params.toString.number.years=Nombre d'années \: %1$s\n\n -isisfish.params.toString.objective= -isisfish.params.toString.optimization= -isisfish.params.toString.plan=Plan\: %1$s -isisfish.params.toString.plan.number=Numéro de séquence dans le plan \: %1$s\n\n +isisfish.params.toString.fishery=Pêcherie\: %s\n\n +isisfish.params.toString.lib.logger.level=niveau du logger de librairies \: %s +isisfish.params.toString.number.years=Nombre d'années \: %s\n\n +isisfish.params.toString.objective=Fonction d'objectif \: %s +isisfish.params.toString.optimization=Méthode d'optimisation \: %s +isisfish.params.toString.optimizationExport=Export d'optimisation \: %s +isisfish.params.toString.optimizationObservation=Observation d'optimisation \: %s +isisfish.params.toString.plan=Plan\: %s +isisfish.params.toString.plan.number=Numéro de séquence dans le plan \: %s\n\n isisfish.params.toString.populations=Populations \: -isisfish.params.toString.rule=Règle\: %1$s +isisfish.params.toString.rule=Règle\: %s isisfish.params.toString.script.generatedpresimulation= isisfish.params.toString.script.logger.level=niveau du logger de scripts \: %1$s isisfish.params.toString.script.presimulation=Script de presimulation
participants (1)
-
echatellier@users.forge.codelutin.com