r3933 - in branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui: . sensitivity simulator widget/editor
Author: echatellier Date: 2014-04-04 18:09:12 +0200 (Fri, 04 Apr 2014) New Revision: 3933 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/3933 Log: refs #4803: Ajout de la possibilit?\195?\169 de d?\195?\169finir des parametres de regles de type "Factor" Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.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/sensitivity/SensitivityTabUI.jaxx 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/SimulAction.java branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java 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/StepComponent.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-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/SimulationUI.jaxx 2014-04-04 16:09:12 UTC (rev 3933) @@ -108,7 +108,7 @@ */ public void refreshFactorTree() { - } + }*/ ]]></script> <JMenuBar constraints='BorderLayout.NORTH'> <JMenu text="isisfish.simulation.menu.simulation"> Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2014-04-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2014-04-04 16:09:12 UTC (rev 3933) @@ -62,7 +62,6 @@ public void setTreeModel() { if (getFisheryRegion() != null) { getCardlayoutPrincipal().show(inputPanePrincipal,"normale"); - String regionName = getFisheryRegion().getName(); setContextValue(getFisheryRegion()); getHandler().loadFisheryRegionTree(this); } Modified: 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/OptimizationHandler.java 2014-04-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/OptimizationHandler.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -22,15 +22,20 @@ */ package fr.ifremer.isisfish.ui.simulator; +import java.awt.event.ActionEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List; import java.util.Map; +import javax.swing.JDialog; import javax.swing.JTable; import javax.swing.ListModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.TopiaContext; import fr.ifremer.isisfish.IsisFishException; import fr.ifremer.isisfish.IsisFishRuntimeException; @@ -38,12 +43,16 @@ import fr.ifremer.isisfish.datastore.ObjectiveStorage; import fr.ifremer.isisfish.datastore.OptimizationStorage; import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.entities.FisheryRegion; import fr.ifremer.isisfish.entities.Observation; import fr.ifremer.isisfish.export.Export; import fr.ifremer.isisfish.simulator.Objective; import fr.ifremer.isisfish.simulator.Optimization; import fr.ifremer.isisfish.simulator.SimulationParameter; -import fr.ifremer.isisfish.ui.input.InputHandler; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.simulator.sensitivity.FactorGroup; +import fr.ifremer.isisfish.ui.SimulationUI; +import fr.ifremer.isisfish.ui.input.InputAction; import fr.ifremer.isisfish.ui.models.common.GenericComboModel; import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellEditor; import fr.ifremer.isisfish.ui.models.common.ScriptParametersTableCellRenderer; @@ -51,11 +60,17 @@ import fr.ifremer.isisfish.ui.models.optimization.ExportObservationTableModel; import fr.ifremer.isisfish.ui.models.optimization.ExportTableCellEditor; import fr.ifremer.isisfish.ui.models.optimization.ExportTableCellRenderer; +import fr.ifremer.isisfish.ui.sensitivity.SensitivitySaveVerifier; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityTabUI; +import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener; -public class OptimizationHandler extends InputHandler { +public class OptimizationHandler { + private static final Log log = LogFactory.getLog(OptimizationHandler.class); + protected FactorEditorListener factorEditorListener; + public void init(OptimizationUI view) { RegionStorage regionStorage = view.getContextValue(RegionStorage.class); view.getExportObservationTable().getColumnModel().getColumn(0).setCellRenderer(new ExportTableCellRenderer()); @@ -129,11 +144,70 @@ 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)); + + ScriptParametersTableCellEditor editor = new ScriptParametersTableCellEditor(objective); + editor.setFactorActionListener(getFactorActionListener(view)); + view.getSimulObjectiveMethodParam().getColumnModel().getColumn(1).setCellEditor(editor); } } + /** + * Retourne une instance de action listener qui affichera l'interface de sélection d'un facteur. + * + * @param view parent view + * @return action listener + */ + protected FactorEditorListener getFactorActionListener(final OptimizationUI view) { + if (factorEditorListener == null) { + factorEditorListener = new FactorEditorListener() { + public void actionPerformed(ActionEvent event) { + // init new sensitivity tav ui hierarchy + final SensitivityTabUI sensitivityTabUI = new SensitivityTabUI(view); + sensitivityTabUI.setContextValue(new InputAction()); + sensitivityTabUI.setContextValue(new SensitivitySaveVerifier()); // prevent NPE + sensitivityTabUI.setContextValue(view.getParentContainer(SimulationUI.class), "SimulationUI"); // prevent NPE + + // init region + // FIXME this transaction in never closed + // and can't be closed because used in + try { + RegionStorage regionStorage = view.getContextValue(RegionStorage.class); + TopiaContext tx = regionStorage.getStorage().beginTransaction(); + FisheryRegion fisheryRegion = RegionStorage.getFisheryRegion(tx); + sensitivityTabUI.setFisheryRegion(fisheryRegion); + sensitivityTabUI.setTreeModel(); + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't init dialog tree", ex); + } + + // display dialog + JDialog dialog = new JDialog(); + dialog.setTitle("Sélection d'un facteur"); + dialog.add(sensitivityTabUI); + dialog.setSize(800, 600); + dialog.setLocationRelativeTo(view); + dialog.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + // get first factor + FactorGroup factorGroup = sensitivityTabUI.getContextValue(SimulAction.class).getFactorGroup(); + + if (factorGroup.size() > 0) { + Factor factor = factorGroup.get(factorGroup.size() - 1); + // useless, but clear for next call + sensitivityTabUI.getContextValue(SimulAction.class).removeFactor(factor.getPath()); + setSelectedFactor(factor); + } + } + }); + dialog.setVisible(true); + } + }; + } + return factorEditorListener; + } + /** * Optimization model for combo box. * @@ -186,7 +260,10 @@ 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)); + + ScriptParametersTableCellEditor editor = new ScriptParametersTableCellEditor(optimization); + editor.setFactorActionListener(getFactorActionListener(view)); + view.getSimulOptimizationMethodParam().getColumnModel().getColumn(1).setCellEditor(editor); } } 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-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -79,8 +79,6 @@ import fr.ifremer.isisfish.export.SensitivityExport; import fr.ifremer.isisfish.mexico.MexicoHelper; import fr.ifremer.isisfish.rule.Rule; -import fr.ifremer.isisfish.simulator.Objective; -import fr.ifremer.isisfish.simulator.Optimization; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.simulator.SimulationParameterImpl; import fr.ifremer.isisfish.simulator.SimulationPlan; Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java (rev 0) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -0,0 +1,40 @@ +package fr.ifremer.isisfish.ui.widget.editor; + +import javax.swing.CellEditor; +import javax.swing.JButton; + +import fr.ifremer.isisfish.simulator.sensitivity.Factor; +import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener.FactorCallback; + +public class FactorEditor extends JButton implements FactorCallback { + + /** Cell editor. */ + protected CellEditor cellEditor; + + /** Component factor value. */ + protected Factor factor; + + /** serialVersionUID. */ + private static final long serialVersionUID = 4070032587998279914L; + + public FactorEditor(CellEditor cellEditor, Factor factor) { + this.cellEditor = cellEditor; + this.factor = factor; + + if (factor != null) { + setText(factor.toString()); + } else { + setText("Edition du facteur"); + } + } + + public Factor getFactor() { + return factor; + } + + @Override + public void setSelectedFactor(Factor factor) { + this.factor = factor; + cellEditor.stopCellEditing(); + } +} Property changes on: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditor.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java (rev 0) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -0,0 +1,27 @@ +package fr.ifremer.isisfish.ui.widget.editor; + +import java.awt.event.ActionListener; + +import fr.ifremer.isisfish.simulator.sensitivity.Factor; + +/** + * Action listener that call factor callback when action is complete. + * + * @author Eric Chatellier + */ +public abstract class FactorEditorListener implements ActionListener { + + public interface FactorCallback { + public void setSelectedFactor(Factor factor); + } + + public FactorCallback callback; + + public void setFactorCallback(FactorCallback callback) { + this.callback = callback; + } + + public void setSelectedFactor(Factor factor) { + callback.setSelectedFactor(factor); + } +} Property changes on: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/FactorEditorListener.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java 2014-04-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/MonthComponent.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -37,7 +37,7 @@ * Last update : $Date$ * By : $Author$ */ -public class MonthComponent extends JComboBox { +public class MonthComponent extends JComboBox<MonthEnum> { /** serialVersionUID. */ private static final long serialVersionUID = 2992441627176713132L; 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-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/ParameterTableCellEditor.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -34,12 +34,12 @@ import java.util.List; import javax.swing.AbstractCellEditor; +import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.TableCellEditor; - import org.apache.commons.beanutils.ConvertUtilsBean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -48,8 +48,9 @@ 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.types.TimeStep; +import fr.ifremer.isisfish.ui.widget.editor.FactorEditorListener.FactorCallback; import fr.ifremer.isisfish.util.ConverterUtil; /** @@ -78,6 +79,8 @@ protected Class<?> type = null; + protected FactorEditorListener factorActionListener; + private static enum TypeClassMapping { /** for simple int. */ Int(int.class, Integer.class), @@ -139,6 +142,10 @@ } } + public void setFactorActionListener(FactorEditorListener factorActionListener) { + this.factorActionListener = factorActionListener; + } + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { @@ -194,8 +201,13 @@ editor = MonthComponent.createMounthCombo(((Month) value).getMonthNumber()); break; case Factor: - // FIXME poussin 20140402 creer un selecteur de factor - // break; + editor = new FactorEditor(this, (Factor)value); + if (factorActionListener == null) { + throw new RuntimeException("Missing factorActionListener call setFactorActionListener()"); + } + factorActionListener.setFactorCallback((FactorCallback)editor); + ((JButton)editor).addActionListener(factorActionListener); + break; case File: // break; default: @@ -203,7 +215,7 @@ } if (editor != null) { if (JComboBox.class.isInstance(editor)) { - ((JComboBox) editor).addActionListener(getComboListener()); + ((JComboBox) editor).addActionListener(getStopEditingListener()); } else if (JTextField.class.isInstance(editor)) { ((JTextField) editor).addFocusListener(new FocusAdapter() { @Override @@ -217,10 +229,10 @@ } else if (StepComponent.class.isInstance(editor)) { StepComponent date = ((StepComponent) editor); if (date.getMounthCombo() != null) { - date.getMounthCombo().addActionListener(getComboListener()); + date.getMounthCombo().addActionListener(getStopEditingListener()); } if (date.getYearCombo() != null) { - date.getYearCombo().addActionListener(getComboListener()); + date.getYearCombo().addActionListener(getStopEditingListener()); } } } @@ -247,7 +259,7 @@ return value.getClass(); } - protected ActionListener getComboListener() { + protected ActionListener getStopEditingListener() { return new ActionListener() { @Override @@ -267,11 +279,10 @@ TypeClassMapping mapping = TypeClassMapping.getMapping(type); switch (mapping) { case Topia: - result = getComboBoxValue(editor); + result = ((JComboBox) editor).getSelectedItem(); break; case Boolean: - result = getComboBoxValue(editor); - // TODO test + result = ((JComboBox) editor).getSelectedItem(); break; case Mounth: result = new Month(((MonthComponent)editor).getSelectedValue()); @@ -280,8 +291,8 @@ result = new TimeStep(((StepComponent) editor).getSelectedValue()); break; case Factor: - // FIXME poussin 20140402 get value from factor editor - // break; + result = ((FactorEditor)editor).getFactor(); + break; case File: //TODO // result = getTextFieldValue(editor);break; @@ -308,16 +319,4 @@ return result; } - - protected Object getTextFieldValue(Component editor) { - return ((JTextField) editor).getText(); - } - - protected Object getComboBoxValue(Component editor) { - return ((JComboBox) editor).getSelectedItem(); - } - - protected int getComboBoxIndex(Component editor) { - return (((JComboBox) editor)).getSelectedIndex(); - } } Modified: branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java =================================================================== --- branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java 2014-04-04 13:00:45 UTC (rev 3932) +++ branches/4.0.1/src/main/java/fr/ifremer/isisfish/ui/widget/editor/StepComponent.java 2014-04-04 16:09:12 UTC (rev 3933) @@ -24,12 +24,12 @@ package fr.ifremer.isisfish.ui.widget.editor; import java.awt.GridLayout; -import java.util.ArrayList; -import java.util.List; import javax.swing.JComboBox; import javax.swing.JPanel; +import org.nuiton.util.MonthEnum; + /** * Component used to edit TimeStep. * @@ -43,9 +43,9 @@ private static final long serialVersionUID = -6694461572642939712L; - protected JComboBox mounth; + protected JComboBox<MonthEnum> mounth; - protected JComboBox year; + protected JComboBox<Integer> year; public StepComponent(int mounth, int year) { super(new GridLayout(0, 2)); @@ -57,11 +57,11 @@ this.add(this.year); } - public JComboBox getYearCombo() { + public JComboBox<Integer> getYearCombo() { return year; } - public JComboBox getMounthCombo() { + public JComboBox<MonthEnum> getMounthCombo() { return mounth; } @@ -84,13 +84,11 @@ return selectedMounth + selectedYear * 12; } - public static JComboBox createYearCombo(int nb, int selectedYear) { - List<Integer> listI = new ArrayList<Integer>(); + public static JComboBox<Integer> createYearCombo(int nb, int selectedYear) { + JComboBox<Integer> year = new JComboBox<Integer>(); for (int i = 0; i < nb; i++) { - listI.add(i); + year.addItem(i); } - JComboBox year = new JComboBox(listI.toArray()); - listI.clear(); year.setSelectedIndex(selectedYear); return year; }
participants (1)
-
echatellier@users.forge.codelutin.com