Author: chatellier Date: 2009-03-16 18:42:18 +0000 (Mon, 16 Mar 2009) New Revision: 1979 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java Log: Ajout de l'interface SPOD : "second pass on demand" Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java 2009-03-16 18:10:01 UTC (rev 1978) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java 2009-03-16 18:42:18 UTC (rev 1979) @@ -45,7 +45,6 @@ import org.codelutin.math.matrix.gui.MatrixPanelEditor; import org.codelutin.topia.persistence.TopiaEntity; import fr.ifremer.isisfish.ui.input.RangeOfValuesUI; -import javax.swing.JPanel; /** * Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java 2009-03-16 18:10:01 UTC (rev 1978) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java 2009-03-16 18:42:18 UTC (rev 1979) @@ -23,7 +23,6 @@ import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; -import javax.swing.text.JTextComponent; import org.codelutin.math.matrix.MatrixND; /** Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivitySecondPassUI.jaxx 2009-03-16 18:42:18 UTC (rev 1979) @@ -0,0 +1,111 @@ +<!-- +/* *##% + * Copyright (C) 2009 Ifremer, Code Lutin + * + * 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. + *##%*/ + +/* * + * SensitivitySecondPassUI. + * + * @author chatellier + * @version $Revision: 1312 $ + * + * Last update: $Date: 2008-08-28 10:21:07 +0200 (jeu, 28 aoû 2008) $ + * by : $Author: sletellier $ + */ + --> +<Table> +<script><![CDATA[ + import javax.swing.table.DefaultTableModel; + import javax.swing.table.TableModel; + import jaxx.runtime.swing.Item; + import java.util.List; + import java.util.ArrayList; + import java.io.File; + import org.codelutin.util.FileUtil; + import fr.ifremer.isisfish.datastore.SensitivityStorage; + import fr.ifremer.isisfish.ui.simulator.SimulAction; + import fr.ifremer.isisfish.ui.widget.editor.GenericCell; + import fr.ifremer.isisfish.ui.widget.editor.ParameterColumnEditor; + import fr.ifremer.isisfish.datastore.SimulationStorage; + + /** + * Model de contenu de la liste des nom de simulations + */ + public ComboBoxModel getSensitivitySimulationModel() { + List<String> asNames = new ArrayList<String>(); + for (String simulationName : SimulationStorage.getSimulationNames()) { + if (simulationName.startsWith("as_")) { + String masterSensitivityName = simulationName.substring(0, simulationName.lastIndexOf("_")); + if (!asNames.contains(masterSensitivityName)) { + asNames.add(masterSensitivityName); + } + } + } + + List<Item> items = new ArrayList<Item>(); + items.add(new Item("null", " ", null, true)); + for (String asName : asNames) { + items.add(new Item(asName, asName, asName, true)); + } + + fieldSensitivitySimulationSelect.setItems(items); + return fieldSensitivitySimulationSelect.getModel(); + } + + protected SimulAction getSimulAction() { + return getContextValue(SimulAction.class); + } + + protected void launchSecondPass(ActionEvent event) { + if (fieldSensitivitySimulationSelect.getSelectedIndex() != -1) { + + try { + List<File> files = getSimulAction().runSensitivitySecondPass((String)fieldSensitivitySimulationSelect.getSelectedItem()); + + String content = ""; + for(File file : files) { + content += "Fichier " + file.getName() + "\n"; + content += "------------------------------\n"; + content += FileUtil.readAsString(file) + "\n"; + content += "\n"; + } + textAreaSensitivitySecondpassResult.setText(content); + } + catch(IOException e) { + if (log.isErrorEnabled()) { + log.error("Can't run second pass", e); + } + } + } + } + + ]]> + </script> + <row> + <cell fill="horizontal" weightx="1.0"> + <JComboBox id="fieldSensitivitySimulationSelect" model='{getSensitivitySimulationModel()}' /> + </cell> + <cell fill="horizontal"> + <JButton text='isisfish.sensitivity.secondpass' onActionPerformed='launchSecondPass(event)' /> + </cell> + </row> + <row> + <cell columns="2" fill="both" weightx="1.0" weighty="1.0"> + <JTextArea id='textAreaSensitivitySecondpassResult' text=''/> + </cell> + </row> +</Table> \ No newline at end of file Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2009-03-16 18:10:01 UTC (rev 1978) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2009-03-16 18:42:18 UTC (rev 1979) @@ -65,7 +65,10 @@ <ResultChoiceUI id="resultChoiceUI" constructorParams='getContextValue(SimulAction.class)'/> </tab> <tab id="advancedParamsUITab" title='isisfish.advancedParameters.title'> - <AdvancedParamsUI id="advencedParamsUI" constructorParams='getContextValue(SimulAction.class)'/> + <AdvancedParamsUI id="advancedParamsUI" constructorParams='getContextValue(SimulAction.class)'/> </tab> + <tab id="secondPassUITab" title='isisfish.sensitivity.secondpass.title'> + <SensitivitySecondPassUI id="sensitivitySecondPassUI" constructorParams='new JAXXInitialContext().add(this)'/> + </tab> </JTabbedPane> </JPanel> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2009-03-16 18:10:01 UTC (rev 1978) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2009-03-16 18:42:18 UTC (rev 1979) @@ -52,7 +52,6 @@ import fr.ifremer.isisfish.datastore.SensitivityStorage; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.SimulatorStorage; -import fr.ifremer.isisfish.entities.Equation; import fr.ifremer.isisfish.entities.Population; import fr.ifremer.isisfish.entities.Species; import fr.ifremer.isisfish.entities.Strategy; @@ -65,9 +64,9 @@ import fr.ifremer.isisfish.simulator.launcher.SimulationService; import fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher; 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.SensitivityCalculator; +import fr.ifremer.isisfish.simulator.sensitivity.SensitivityException; import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; @@ -76,7 +75,6 @@ import fr.ifremer.isisfish.ui.widget.ErrorDialogUI; import fr.ifremer.isisfish.ui.widget.filter.FilterModel; import java.io.Serializable; -import java.util.Iterator; import javax.swing.JComponent; import org.codelutin.math.matrix.MatrixND; @@ -841,8 +839,69 @@ } } - public void launchSimulationWhithSensibility(String simulationId, SimulatorLauncher launcher) { launchSimulation(simulationId, launcher, sensitivityCalculator, designPlan); } + + /** + * Lance la second passe d'une analyse de sensibilité. + * + * @param masterSensitivitySimulationName nom du prefix de toutes les simulations (without _) + * + * @return les fichiers genere lors de la seconde passe + */ + public List<File> runSensitivitySecondPass(String masterSensitivitySimulationName) { + + List<File> result = new ArrayList<File>(); + + // following code may be factorizable with : + // fr.ifremer.isisfish.simulator.launcher.SimulationMonitor.analyzeSensitivityResult(SimulationJob, SimulationStorage) + + // calculator found + SensitivityCalculator sensitivityCalculator = null; + List<SimulationStorage> simulationStorageForAnalyze = new ArrayList<SimulationStorage>(); + File simuationDirectory = SimulationStorage.getSimulationDirectory(); + for (File simuation : simuationDirectory.listFiles()) { + if (simuation.isDirectory() && simuation.getName().startsWith(masterSensitivitySimulationName + "_")) { + SimulationStorage storage = SimulationStorage.getSimulation(simuation.getName()); + simulationStorageForAnalyze.add(storage); + + if (sensitivityCalculator == null) { + // try to find find calculator name in one storage + SimulationParameter params = storage.getParameter(); + sensitivityCalculator = params.getSensitivityCalculator(); + } + } + } + + if (sensitivityCalculator != null) { + try { + // build master sensitivity export directory + File masterExportDirectory = new File(IsisFish.config.getDefaultExportDirectory(), masterSensitivitySimulationName); + if( !masterExportDirectory.isDirectory()) { + masterExportDirectory.mkdirs(); + } + sensitivityCalculator.analyzeResult(simulationStorageForAnalyze, masterExportDirectory); + + // FIXME take all files ? + for(File exportFile : masterExportDirectory.listFiles()) { + if (exportFile.isFile()) { + result.add(exportFile); + } + } + } + catch(SensitivityException e) { + if (log.isErrorEnabled()) { + log.error("Can't call analyse result", e); + } + } + } + else { + if (log.isWarnEnabled()) { + log.warn("Can't run sensitivity second pass"); + } + } + + return result; + } }