Author: bpoussin Date: 2014-04-02 15:52:17 +0200 (Wed, 02 Apr 2014) New Revision: 3919 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3919 Log: try to merge Eric UI with mine Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx Removed: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/models/optimization/ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/optimization/ Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2014-04-02 13:52:17 UTC (rev 3919) @@ -69,6 +69,11 @@ public abstract void setEnabledSimulationPlanTab(boolean selected); /** + * Change optimization tab enabled property. + */ + public abstract void setEnabledOptimizationTab(boolean selected); + + /** * Open user dialog to selected a parameter file. * Reload it, and call {@link #refresh()}. */ Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/WelcomeTabUI.jaxx 2014-04-02 13:52:17 UTC (rev 3919) @@ -30,7 +30,6 @@ fr.ifremer.isisfish.ui.input.InputSaveVerifier fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier fr.ifremer.isisfish.ui.sensitivity.SensitivityInputHandler - fr.ifremer.isisfish.ui.optimization.OptimizationHandler javax.swing.ImageIcon </import> @@ -59,10 +58,6 @@ <fr.ifremer.isisfish.ui.sensitivity.SensitivityUI id="sensitivityUI" constructorParams='new JAXXInitialContext().add(new InputAction()).add(new SensitivitySaveVerifier()).add(new SimulAction()).add(new SensitivityInputHandler()).add(this)' /> </tab> - <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/SimulationLauncher.gif"))}'> - <fr.ifremer.isisfish.ui.optimization.OptimizationUI id="optimizationUI" - constructorParams='new JAXXInitialContext().add(new InputAction()).add(new SensitivitySaveVerifier()).add(new SimulAction()).add(new OptimizationHandler()).add(this)' /> - </tab> <tab title=' ' icon='{new ImageIcon(getClass().getResource("/images/calc.gif"))}'> <fr.ifremer.isisfish.ui.result.ResultUI /> </tab> Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2014-04-02 13:52:17 UTC (rev 3919) @@ -64,8 +64,13 @@ public void setEnabledSimulationPlanTab(boolean selected) { // no simulation plan in AS } - + @Override + public void setEnabledOptimizationTab(boolean selected) { + // no optimisation.in AS + } + + @Override public void refreshFactorTree() { sensitivityTabUI.setFactorModel(); } Copied: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java (from rev 3905, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/optimization/OptimizationHandler.java) =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java (rev 0) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2014-04-02 13:52:17 UTC (rev 3919) @@ -0,0 +1,209 @@ +/* + * #%L + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2013 - 2014 Ifremer, Codelutin, Chatellier Eric + * %% + * 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 3 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, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ +package fr.ifremer.isisfish.ui.simulator; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +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.simulator.Objective; +import fr.ifremer.isisfish.simulator.Optimization; +import fr.ifremer.isisfish.ui.input.InputHandler; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer; +import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableModel; +import fr.ifremer.isisfish.ui.models.common.GenericComboModel; +import javax.swing.ListModel; +import javax.swing.table.TableModel; + +public class OptimizationHandler extends InputHandler { + + private static final Log log = LogFactory.getLog(OptimizationHandler.class); + + public void init(OptimizationUI view) { + } + + /** + * Optimization model for combo box. + * + * @return model + */ + public GenericComboModel<String> getObjectiveComboModel() { + List<String> result = new ArrayList<String>(); + for (String r : ObjectiveStorage.getObjectiveNames()) { + // there is some non java files in sensitivity directory + if (r.endsWith(".java")) { + // Remove .java extention + // for example SensitivityStorage.getRuleName(String) + result.add(r.substring(0, r.length() - 5)); + } + } + + GenericComboModel<String> model = new GenericComboModel<String>(result); + return model; + } + + /** + * Selection d'une méthode d'optimisation. + * + * @param view view + */ + public void objectiveChanged(OptimizationUI view) { + String objectiveName = (String)view.getFieldObjectiveMethodSelect().getSelectedItem(); + SimulAction simulAction = view.getContextValue(SimulAction.class); + + // creation new instance only when name change to not lose parameters value + Objective objective = simulAction.getObjective(); + if (objective != null && objective.getClass().getSimpleName().equals(objectiveName)) { + objective = simulAction.getObjective(); + } else { + try { + ObjectiveStorage objectiveStorage = ObjectiveStorage.getObjective(objectiveName); + objective = objectiveStorage.getNewInstance(); + } catch (IsisFishException e) { + if (log.isErrorEnabled()) { + log.error("Can't set optimization", e); + } + } + } + + // can be null for example if analysis can't be compiled + if (objective != null) { + simulAction.setObjective(objective); + + /*CardLayout factorPanelLayout = (CardLayout)view.getFactorCardinalityPanel().getLayout(); + if (sensitivityAnalysis.canManageCardinality()) { + factorPanelLayout.show(factorCardinalityPanel, "factorCardinalitySupported"); + } else { + factorPanelLayout.show(factorCardinalityPanel, "factorCardinalityNotSupported"); + }*/ + + // update model + ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(objective); + view.getSimulObjectiveMethodParam().setModel(parametersTableModel); + view.getSimulObjectiveMethodParam().getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(objective)); + view.getSimulObjectiveMethodParam().getColumnModel().getColumn(1).setCellEditor(new ScriptParametersTableCellEditor(objective)); + } + } + + + /** + * Optimization model for combo box. + * + * @return model + */ + public GenericComboModel<String> getOptimizationComboModel() { + List<String> result = new ArrayList<String>(); + for (String r : OptimizationStorage.getOptimizationNames()) { + // there is some non java files in sensitivity directory + if (r.endsWith(".java")) { + // Remove .java extention + // for example SensitivityStorage.getRuleName(String) + result.add(r.substring(0, r.length() - 5)); + } + } + + GenericComboModel<String> model = new GenericComboModel<String>(result); + return model; + } + + /** + * Selection d'une méthode d'optimisation. + * + * @param view view + */ + public void optimizationChanged(OptimizationUI view) { + String optimizationName = (String)view.getFieldOptimizationMethodSelect().getSelectedItem(); + SimulAction simulAction = view.getContextValue(SimulAction.class); + + // creation new instance only when name change to not lose parameters value + Optimization optimization = simulAction.getOptimization(); + if (optimization != null && optimization.getClass().getSimpleName().equals(optimizationName)) { + optimization = simulAction.getOptimization(); + } else { + try { + OptimizationStorage optimizationStorage = OptimizationStorage.getOptimization(optimizationName); + optimization = optimizationStorage.getNewInstance(); + } catch (IsisFishException e) { + if (log.isErrorEnabled()) { + log.error("Can't set optimization", e); + } + } + } + + // can be null for example if analysis can't be compiled + if (optimization != null) { + simulAction.setOptimization(optimization); + + /*CardLayout factorPanelLayout = (CardLayout)view.getFactorCardinalityPanel().getLayout(); + if (sensitivityAnalysis.canManageCardinality()) { + factorPanelLayout.show(factorCardinalityPanel, "factorCardinalitySupported"); + } else { + factorPanelLayout.show(factorCardinalityPanel, "factorCardinalityNotSupported"); + }*/ + + // update model + ScriptParametersTableModel parametersTableModel = new ScriptParametersTableModel(optimization); + view.getSimulOptimizationMethodParam().setModel(parametersTableModel); + view.getSimulOptimizationMethodParam().getColumnModel().getColumn(0).setCellRenderer(new ScriptParametersTableCellRenderer(optimization)); + view.getSimulOptimizationMethodParam().getColumnModel().getColumn(1).setCellEditor(new ScriptParametersTableCellEditor(optimization)); + } + } + + + /** + * Export model for combo box. + * + * @return model + */ + public ListModel<String> getExportListModel() { + List<String> result = new ArrayList<String>(); + for (String r : ExportStorage.getExportNames()) { + // there is some non java files in sensitivity directory + if (r.endsWith(".java")) { + // Remove .java extention + // for example SensitivityStorage.getRuleName(String) + result.add(r.substring(0, r.length() - 5)); + } + } + + GenericComboModel<String> model = new GenericComboModel<String>(result); + return model; + } + + /** + * Export model for combo box. + * + * @return model + */ + public TableModel getExportObservationTableModel() { + ExportObservationTableModel model = new ExportObservationTableModel(); + return model; + } +} Copied: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx (from rev 3905, branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/optimization/OptimizationMethodUI.jaxx) =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx (rev 0) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationUI.jaxx 2014-04-02 13:52:17 UTC (rev 3919) @@ -0,0 +1,123 @@ +<!-- + #%L + IsisFish + + $Id$ + $HeadURL$ + %% + Copyright (C) 2013 - 2014 Ifremer, CodeLutin, Chatellier Eric + %% + 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 3 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, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<Table> + <import> + java.awt.CardLayout + javax.swing.ComboBoxModel + javax.swing.table.DefaultTableModel + </import> + + <script><![CDATA[ +// protected void $afterCompleteSetup() { +// handler.init(this); +// } + + public void refresh() { + // Objective names list + fieldObjectiveMethodSelect.setModel(handler.getObjectiveComboModel()); + // Optimization names list + fieldOptimizationMethodSelect.setModel(handler.getOptimizationComboModel()); + } + + + ]]></script> + <OptimizationHandler id="handler" javaBean='new OptimizationHandler()'/> + + <!-- Objective choice and param --> + <row> + <cell fill="horizontal"> + <JLabel text="isisfish.objective.select"/> + </cell> + <cell fill="horizontal" weightx="1.0"> + <JComboBox id="fieldObjectiveMethodSelect" model='{handler.getObjectiveComboModel()}' + onActionPerformed='handler.objectiveChanged(this)'/> + </cell> + </row> + <row> + <cell columns="2" fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="simulObjectiveMethodParam" rowHeight="24" /> + </JScrollPane> + </cell> + </row> + + <!-- Optimisation choice and param --> + <row> + <cell fill="horizontal"> + <JLabel text="isisfish.optimization.select"/> + </cell> + <cell fill="horizontal" weightx="1.0"> + <JComboBox id="fieldOptimizationMethodSelect" model='{handler.getOptimizationComboModel()}' + onActionPerformed='handler.optimizationChanged(this)'/> + </cell> + </row> + <row> + <cell columns="2" fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="simulOptimizationMethodParam" rowHeight="24" /> + </JScrollPane> + </cell> + </row> + + <row> + <cell fill="both" columns='3'> + <JLabel text="isisfish.optimization.exports" /> + </cell> + </row> + <row> + <cell fill="both" weightx="0.2" weighty="1.0"> + <JScrollPane> + <JList id="fieldExportList" genericType="String" + model='{handler.getExportListModel()}' + cellRenderer='{new fr.ifremer.isisfish.ui.models.export.ExportNameListRenderer()}' /> + </JScrollPane> + </cell> + <cell fill="horizontal" weighty="1.0"> + <Table> + <row> + <cell fill="horizontal"> + <JButton text="isisfish.common.add" /> + </cell> + </row> + <row> + <cell fill="horizontal"> + <JButton text="isisfish.common.remove" /> + </cell> + </row> + <row> + <cell fill="horizontal"> + <JButton text="isisfish.common.clear" /> + </cell> + </row> + </Table> + </cell> + <cell fill="both" weightx="1.0" weighty="1.0"> + <JScrollPane> + <JTable id="exportObservationTable" model="{handler.getExportObservationTableModel()}" rowHeight='24' /> + </JScrollPane> + </cell> + </row> + +</Table> Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2014-04-02 13:52:17 UTC (rev 3919) @@ -136,6 +136,11 @@ // simulation plan fieldSimulUseSimulationPlan.setSelected(simulAction.getSimulationParameter().getUseSimulationPlan()); getParentContainer(SimulUI.class).getSensUI().refresh(); + + // optimization +// fieldSimulUseOptimization.setSelected(simulAction.getSimulationParameter().getUseOptimization()); +// getParentContainer(OptimizationUI.class).getOptimizationUI().refresh(); + } } @@ -226,6 +231,12 @@ simulationUI.setEnabledSimulationPlanTab(fieldSimulUseSimulationPlan.isSelected()); } +protected void enableOptimization() { + simulAction.getSimulationParameter().setUseOptimization(fieldSimulUseOptimization.isSelected()); + SimulationUI simulationUI = getParentContainer(SimulationUI.class); + simulationUI.setEnabledOptimizationTab(fieldSimulUseOptimization.isSelected()); +} + protected void setListSimulParamsStrategiesItems() { List<Strategy> strategiesSelected = simulAction.getSimulationParameter().getStrategies(); DefaultListModel listSimulParamsStrategiesModel = new DefaultListModel(); @@ -497,6 +508,14 @@ enabled="{getRegionStorage() != null}" /> </cell> <cell fill="horizontal" weightx="1"> + <JCheckBox text="isisfish.params.useOptimization" + id="fieldSimulUseOptimization" + selected='{simulAction.getSimulationParameter().getUseOptimization()}' + visible='{!isSensitivity()}' + onItemStateChanged='enableOptimization()' + enabled="{getRegionStorage() != null}" /> + </cell> + <cell fill="horizontal" weightx="1"> <JCheckBox text="isisfish.params.sensitivityOnlyKeepFirstResult" id="sensitivityOnlyKeepFirstResultCheckBox" selected='{simulAction.getSimulationParameter().isSensitivityAnalysisOnlyKeepFirst()}' Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-04-02 13:52:17 UTC (rev 3919) @@ -1330,6 +1330,14 @@ }*/ } + public Objective getObjective() { + return param.getObjective(); + } + + public void setObjective(Objective objective) { + param.setObjective(objective); + } + public Optimization getOptimization() { return param.getOptimization(); } Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulUI.jaxx 2014-04-02 13:52:17 UTC (rev 3919) @@ -30,6 +30,7 @@ paramsUI.refresh(); preScriptUI.refresh(); sensUI.refresh(); + optimizationUI.refresh(); exportUI.refresh(); resultChoiceUI.refresh(); advancedParamsUI.refresh(); @@ -63,6 +64,14 @@ bodyTabbedPane.setSelectedIndex(2); } } + + @Override + public void setEnabledOptimizationTab(boolean selected) { + bodyTabbedPane.setEnabledAt(3, selected); + if (selected) { + bodyTabbedPane.setSelectedIndex(3); + } + } ]]></script> <JTabbedPane id="bodyTabbedPane"> <tab title='isisfish.params.title'> @@ -74,6 +83,9 @@ <tab title='isisfish.sens.title' enabled='false'> <SensUI id="sensUI" constructorParams='this' /> </tab> + <tab title='isisfish.optimization.title' enabled='false'> + <OptimizationUI id="optimizationUI" constructorParams='this' /> + </tab> <tab title='isisfish.export.title'> <ExportUI id="exportUI" constructorParams='this' /> </tab> Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2014-04-02 13:51:13 UTC (rev 3918) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2014-04-02 13:52:17 UTC (rev 3919) @@ -47,6 +47,7 @@ import org.nuiton.topia.persistence.TopiaEntity; import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.util.ConverterUtil; @@ -91,6 +92,8 @@ Double(double.class, Double.class), /** for a simple boolean. */ Boolean(boolean.class, Boolean.class), + /** for a Factor. */ + Factor(Factor.class), /** for a file location. */ File(java.io.File.class), /** for a simple String. */ @@ -191,6 +194,9 @@ case Mounth: editor = MonthComponent.createMounthCombo(((Month) value).getMonthNumber()); break; + case Factor: + // FIXME poussin 20140402 creer un selecteur de factor + // break; case File: // break; default: @@ -274,6 +280,9 @@ case TimeStep: result = new TimeStep(((StepComponent) editor).getSelectedValue()); break; + case Factor: + // FIXME poussin 20140402 get value from factor editor + // break; case File: //TODO // result = getTextFieldValue(editor);break;