Author: chatellier Date: 2009-11-17 15:38:42 +0000 (Tue, 17 Nov 2009) New Revision: 2760 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java isis-fish/trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java Removed: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeCellRenderer.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModel.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityNavigationTreeSelectionAdapter.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabbedPaneListener.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties Log: Refactoring of sensitivity (phase1) Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -34,13 +34,6 @@ <!-- Layer bloquant completement la saisie --> <jaxx.runtime.swing.BlockingLayerUI id='layerUI' blockingColor='{new Color(50,50,50)}' /> - <!-- acceptAction='{new AbstractAction() { - private static final long serialVersionUID = 1L; - @Override - public void actionPerformed(ActionEvent e) { - accept(e); - } - }}' --> <!-- Layer avec les icones permettant d'ajouter des facteurs --> <jaxx.runtime.swing.BlockingLayerUI2 id='layerUI2' @@ -133,7 +126,8 @@ String method = (String)boxed.getClientProperty("method"); boolean isSensitivityFactorEnabled = false; if (classBean != null) { - isSensitivityFactorEnabled = SensitivityUtils.isSensitivityFactorEnabled(classBean.getSimpleName().replace("Impl", "") + "." + method); + String sensitivityFactorName = classBean.getSimpleName().replace("Impl", "") + "." + method; + isSensitivityFactorEnabled = SensitivityUtils.isSensitivityFactorEnabled(sensitivityFactorName); } if (isSensitivityFactorEnabled) { jaxx.runtime.swing.BlockingLayerUI2 ui = layerUI2.clone(); Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -23,27 +23,23 @@ protected JTextField continueMax = null; protected JTextField continueMin = null; -addPropertyChangeListener("continuePossible", new PropertyChangeListener(){ - - @Override - public void propertyChange(PropertyChangeEvent evt) { - continueMax.setVisible((Boolean)evt.getNewValue()); - continueMin.setVisible((Boolean)evt.getNewValue()); - } - +addPropertyChangeListener("continuePossible", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + continueMax.setVisible((Boolean)evt.getNewValue()); + continueMin.setVisible((Boolean)evt.getNewValue()); + } }); -addPropertyChangeListener("continueSelected", new PropertyChangeListener(){ - - @Override - public void propertyChange(PropertyChangeEvent evt) { - continueMax.setEnabled((Boolean)evt.getNewValue()); - continueMin.setEnabled((Boolean)evt.getNewValue()); - } - +addPropertyChangeListener("continueSelected", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + continueMax.setEnabled((Boolean)evt.getNewValue()); + continueMin.setEnabled((Boolean)evt.getNewValue()); + } }); -public void init(JTextField cMin, JTextField cMax){ +public void init(JTextField cMin, JTextField cMax) { continueMax = cMax; continueMin = cMin; continueMax.setEnabled(isContinueSelected()); @@ -54,10 +50,12 @@ continueMaxPanel.add(continueMax, BorderLayout.CENTER); continueMinPanel.add(continueMin, BorderLayout.CENTER); } -public String getMin(){ + +public String getMin() { return continueMin.getText(); } -public String getMax(){ + +public String getMax() { return continueMax.getText(); } ]]> @@ -65,13 +63,13 @@ <Table id='content' constraints='BorderLayout.CENTER'> <row> <cell fill='horizontal'> - <JLabel text='isisfish.factor.firstValue' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> + <JLabel text='isisfish.sensitivity.firstValue' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> <cell fill='horizontal' weightx='0.5'> <JPanel id='continueMinPanel' layout='{new BorderLayout()}'/> </cell> <cell fill='horizontal'> - <JLabel text='isisfish.factor.lastValue' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> + <JLabel text='isisfish.sensitivity.lastValue' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> <cell fill='horizontal' weightx='0.5'> <JPanel id='continueMaxPanel' layout='{new BorderLayout()}'/> 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-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -18,6 +18,30 @@ package fr.ifremer.isisfish.ui.sensitivity; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JList; +import javax.swing.JRadioButton; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.text.JTextComponent; + +import jaxx.runtime.JAXXInitialContext; +import jaxx.runtime.swing.editor.NumberEditor; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.math.matrix.MatrixND; +import org.nuiton.math.matrix.gui.MatrixEditor; +import org.nuiton.math.matrix.gui.MatrixPanelEditor; +import org.nuiton.topia.persistence.TopiaEntity; + import fr.ifremer.isisfish.entities.Formule; import fr.ifremer.isisfish.entities.Selectivity; import fr.ifremer.isisfish.entities.TargetSpecies; @@ -35,64 +59,60 @@ import fr.ifremer.isisfish.ui.input.PopulationMigrationImmigrationUI; import fr.ifremer.isisfish.ui.input.PopulationMigrationMigrationUI; import fr.ifremer.isisfish.ui.input.PopulationZonesEditorUI; +import fr.ifremer.isisfish.ui.input.RangeOfValuesUI; +import fr.ifremer.isisfish.ui.input.SelectivityEditorUI; import fr.ifremer.isisfish.ui.input.SpeciesStructuredUI; import fr.ifremer.isisfish.ui.widget.IntervalPanel; -import java.lang.reflect.Method; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JList; -import javax.swing.JRadioButton; -import javax.swing.JTable; -import javax.swing.JTextField; -import javax.swing.text.JTextComponent; -import jaxx.runtime.JAXXInitialContext; -import jaxx.runtime.swing.JAXXList; -import org.nuiton.math.matrix.MatrixND; -import org.nuiton.math.matrix.gui.MatrixPanelEditor; -import org.nuiton.topia.persistence.TopiaEntity; -import fr.ifremer.isisfish.ui.input.RangeOfValuesUI; -import fr.ifremer.isisfish.ui.input.SelectivityEditorUI; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import jaxx.runtime.swing.editor.NumberEditor; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.gui.MatrixEditor; /** + * Helper for sensitivity Swing component manipulation. + * + * @author letellier + * @version $Revision$ * - * @author letellier + * Last update: $Date$ + * by : $Author$ */ public class EditorHelper { /** Class logger. */ private static Log log = LogFactory.getLog(InputTabbedPaneListener.class); - public static String getMethod(JComponent c) { - return (String) c.getClientProperty("method"); + /** + * Get "method" property value for wing component. + * + * @param component component + * @return property value + */ + public static String getMethod(JComponent component) { + return (String) component.getClientProperty("method"); } - public static JComponent getEditor(JComponent c, TopiaEntity e) { + /** + * Get copy of component with original entity value as default value. + * + * @param component component + * @param entity entity + * @return component copy + */ + public static JComponent getEditor(JComponent component, TopiaEntity entity) { JComponent result = null; try { - String fieldName = getMethod(c); - result = c.getClass().newInstance(); + String fieldName = getMethod(component); + result = component.getClass().newInstance(); if (result instanceof JTextField) { - ((JTextComponent) result).setText(String.valueOf(callMethod(e, - fieldName))); + ((JTextComponent) result).setText(String.valueOf(getMethodValue(entity, fieldName))); } else if (result instanceof NumberEditor) { - NumberEditor ui = (NumberEditor) c; + NumberEditor ui = (NumberEditor) component; JTextField numEditor = new JTextField(); numEditor.setText(String.valueOf(ui.getModel())); result = numEditor; } else if (result instanceof MatrixEditor) { - MatrixEditor ui = (MatrixEditor) c; - MatrixND m = (MatrixND) callMethod(e, fieldName); + MatrixEditor ui = (MatrixEditor) component; + MatrixND m = (MatrixND) getMethodValue(entity, fieldName); MatrixPanelEditor matrix = new MatrixPanelEditor(false); if (m != null) { matrix.setMatrix(m.clone()); @@ -102,38 +122,37 @@ result = matrix; } else if (result instanceof JTable) { - ((JTable) result).setModel(((JTable) c).getModel()); + ((JTable) result).setModel(((JTable) component).getModel()); } else if (result instanceof JComboBox) { - JComboBox combo = (JComboBox) c; + JComboBox combo = (JComboBox) component; JComboBox comboResult = new JComboBox(); comboResult.setModel(combo.getModel()); comboResult.setSelectedIndex(combo.getSelectedIndex()); result = comboResult; } else if (result instanceof JList) { - JList list = (JList) c; + JList list = (JList) component; JList listResult = new JList(); listResult.setModel(list.getModel()); listResult.setSelectedIndices(list.getSelectedIndices()); result = listResult; } else if (result instanceof JCheckBox) { - ((JCheckBox) result).setSelected((Boolean) callMethod(e, + ((JCheckBox) result).setSelected((Boolean) getMethodValue(entity, fieldName)); - JCheckBox cOrigin = (JCheckBox) c; + JCheckBox cOrigin = (JCheckBox) component; ((JCheckBox) result).setText(cOrigin.getText()); } else if (result instanceof JRadioButton) { - ((JRadioButton) result).setSelected((Boolean) callMethod(e, + ((JRadioButton) result).setSelected((Boolean) getMethodValue(entity, fieldName)); - JRadioButton cOrigin = (JRadioButton) c; + JRadioButton cOrigin = (JRadioButton) component; ((JRadioButton) result).setText(cOrigin.getText()); } else if (result instanceof SpeciesStructuredUI) { - SpeciesStructuredUI origine = (SpeciesStructuredUI) c; SpeciesStructuredUI ui = new SpeciesStructuredUI(); ui.setActif(true); result = ui; } else if (result instanceof InputOneEquationUI) { - InputOneEquationUI origine = (InputOneEquationUI) c; + InputOneEquationUI origine = (InputOneEquationUI) component; InputOneEquationUI ui = new InputOneEquationUI( new JAXXInitialContext().add(new InputAction())); ui.setSelectedEquation(origine.getSelectedEquation()); @@ -142,20 +161,20 @@ ui.setClazz(origine.getClazz()); ui.setMethodGet(origine.getMethodGet()); ui.setMethodSet(origine.getMethodSet()); - ui.setBean(e); + ui.setBean(entity); ui.setActif(true); ui.refresh(); result = ui; } else if (result instanceof IntervalPanel) { IntervalPanel ipResult = new IntervalPanel(); - IntervalPanel ip = (IntervalPanel) c; + IntervalPanel ip = (IntervalPanel) component; ipResult.setLabelRenderer(Month.MONTH); ipResult.setModel(ip.getModel().clone()); result = ipResult; } else if (result instanceof RangeOfValuesUI) { result = new JTextField(""); } else if (result instanceof SelectivityEditorUI) { - SelectivityEditorUI origine = (SelectivityEditorUI) c; + SelectivityEditorUI origine = (SelectivityEditorUI) component; SelectivityEditorUI ui = new SelectivityEditorUI( new JAXXInitialContext().add(new InputAction()).add( origine.getRegion()).add( @@ -166,7 +185,7 @@ ui.setActif(true); result = ui; } else if (result instanceof MetierSeasonInfoSpeciesEditorUI) { - MetierSeasonInfoSpeciesEditorUI origine = (MetierSeasonInfoSpeciesEditorUI) c; + MetierSeasonInfoSpeciesEditorUI origine = (MetierSeasonInfoSpeciesEditorUI) component; MetierSeasonInfoSpeciesEditorUI ui = new MetierSeasonInfoSpeciesEditorUI( new JAXXInitialContext().add(new InputAction()).add( origine.getRegion()).add( @@ -180,16 +199,14 @@ ui.refresh(); result = ui; } else if (result instanceof PopulationZonesEditorUI) { - PopulationZonesEditorUI origine = (PopulationZonesEditorUI) c; - PopulationZonesEditorUI ui = new PopulationZonesEditorUI( - new JAXXInitialContext().add(new InputAction()).add( - origine.getRegion())); + PopulationZonesEditorUI origine = (PopulationZonesEditorUI) component; + PopulationZonesEditorUI ui = new PopulationZonesEditorUI(new JAXXInitialContext().add(new InputAction()).add(origine.getRegion())); ui.setBean(origine.getBean()); ui.setActif(true); ui.refresh(); result = ui; } else if (result instanceof PopulationMigrationMigrationUI) { - PopulationMigrationMigrationUI origine = (PopulationMigrationMigrationUI) c; + PopulationMigrationMigrationUI origine = (PopulationMigrationMigrationUI) component; PopulationMigrationMigrationUI ui = new PopulationMigrationMigrationUI( new JAXXInitialContext().add(new InputAction())); ui.setBean(origine.getBean()); @@ -198,149 +215,179 @@ ui.refreshPanel(); result = ui; } else if (result instanceof PopulationMigrationEmigrationUI) { - PopulationMigrationEmigrationUI origine = (PopulationMigrationEmigrationUI) c; - PopulationMigrationEmigrationUI ui = new PopulationMigrationEmigrationUI( - new JAXXInitialContext().add(new InputAction())); + PopulationMigrationEmigrationUI origine = (PopulationMigrationEmigrationUI) component; + PopulationMigrationEmigrationUI ui = new PopulationMigrationEmigrationUI(new JAXXInitialContext().add(new InputAction())); ui.setBean(origine.getBean()); ui.setPopInfo(origine.getPopInfo()); ui.setActif(true); ui.refreshPanel(); result = ui; } else if (result instanceof PopulationMigrationImmigrationUI) { - PopulationMigrationImmigrationUI origine = (PopulationMigrationImmigrationUI) c; - PopulationMigrationImmigrationUI ui = new PopulationMigrationImmigrationUI( - new JAXXInitialContext().add(new InputAction())); + PopulationMigrationImmigrationUI origine = (PopulationMigrationImmigrationUI) component; + PopulationMigrationImmigrationUI ui = new PopulationMigrationImmigrationUI(new JAXXInitialContext().add(new InputAction())); ui.setBean(origine.getBean()); ui.setPopInfo(origine.getPopInfo()); ui.setActif(true); ui.refreshPanel(); result = ui; } - } catch (Exception ex) { - log.error(ex); + } catch (IllegalAccessException ex) { + if (log.isErrorEnabled()) { + log.error("Can't make new instance of " + component, ex); + } + } catch (InstantiationException ex) { + if (log.isErrorEnabled()) { + log.error("Can't make new instance of " + component, ex); + } } return result; } - public static ContinuousPanelContainerUI getContinuousPanel(JComponent c, - TopiaEntity e) { + /** + * Get copy of component with original entity value as default value. + * + * @param component component + * @param entity entity + * @return component copy + */ + public static ContinuousPanelContainerUI getContinuousPanel(JComponent component, TopiaEntity entity) { ContinuousPanelContainerUI result = null; - try { - String fieldName = getMethod(c); - DefaultContinuousPanelUI continuousPanel = null; - if (c instanceof InputOneEquationUI) { - InputOneEquationUI origine = (InputOneEquationUI) c; - EquationContinuousPanelUI ui = new EquationContinuousPanelUI( - new JAXXInitialContext().add(new InputAction())); - ui.setSelectedEquation(origine.getSelectedEquation()); - ui.setLblText(origine.getLblText()); - ui.setNameEquation(origine.getNameEquation()); - ui.setClazz(origine.getClazz()); - ui.setMethodGet(origine.getMethodGet()); - ui.setMethodSet(origine.getMethodSet()); - ui.setBean(e); - result = ui; - } else if (c instanceof MatrixEditor) { - MatrixContinuousPanelUI matrixPanel = new MatrixContinuousPanelUI(); - MatrixND m = (MatrixND) callMethod(e, fieldName); - if (m != null) { - matrixPanel.setMatrix(m.clone()); - } - result = matrixPanel; - } else { - continuousPanel = new DefaultContinuousPanelUI(); - result = continuousPanel; + String fieldName = getMethod(component); + DefaultContinuousPanelUI continuousPanel = null; + if (component instanceof InputOneEquationUI) { + InputOneEquationUI origine = (InputOneEquationUI) component; + EquationContinuousPanelUI ui = new EquationContinuousPanelUI( + new JAXXInitialContext().add(new InputAction())); + ui.setSelectedEquation(origine.getSelectedEquation()); + ui.setLblText(origine.getLblText()); + ui.setNameEquation(origine.getNameEquation()); + ui.setClazz(origine.getClazz()); + ui.setMethodGet(origine.getMethodGet()); + ui.setMethodSet(origine.getMethodSet()); + ui.setBean(entity); + result = ui; + } else if (component instanceof MatrixEditor) { + MatrixContinuousPanelUI matrixPanel = new MatrixContinuousPanelUI(); + MatrixND m = (MatrixND) getMethodValue(entity, fieldName); + if (m != null) { + matrixPanel.setMatrix(m.clone()); } - if (continuousPanel != null) { - continuousPanel.init(getNewBoundEditor(c, e), - getNewBoundEditor(c, e)); - } - } catch (Exception ex) { - log.error(ex); + result = matrixPanel; + } else { + continuousPanel = new DefaultContinuousPanelUI(); + result = continuousPanel; } + if (continuousPanel != null) { + continuousPanel.init(getNewBoundEditor(component, entity), getNewBoundEditor(component, entity)); + } return result; } - public static JTextField getNewBoundEditor(JComponent c, TopiaEntity e) { - String fieldName = getMethod(c); - Object value = callMethod(e, fieldName); - if (JTextComponent.class.isInstance(c)) { + /** + * Get new text component with current entity default value. + * + * @param component component + * @param entity entity + * @return + */ + protected static JTextField getNewBoundEditor(JComponent component, TopiaEntity entity) { + String fieldName = getMethod(component); + Object value = getMethodValue(entity, fieldName); + if (component instanceof JTextComponent) { return new JTextField(String.valueOf(value)); } return new JTextField(); } + /** + * Get continuous editor for component with given value. + * + * @param component component + * @param domain domain + * @param factor factor + * @return component copy + */ public static ContinuousPanelContainerUI getContinuousPanelWithValue( - JComponent c, ContinuousDomain domain, Factor f) { + JComponent component, ContinuousDomain<?, ?> domain, Factor<?, ?> factor) { ContinuousPanelContainerUI result = null; - try { - DefaultContinuousPanelUI continuousPanel = null; - if (c instanceof InputOneEquationUI) { - InputOneEquationUI origine = (InputOneEquationUI) c; - EquationContinuousPanelUI ui = new EquationContinuousPanelUI( - new JAXXInitialContext().add(new InputAction())); - ui.setLblText(origine.getLblText()); - ui.setNameEquation(origine.getNameEquation()); - ui.getEditor().getEditor().setText((String) f.getValue()); - ui.setClazz(origine.getClazz()); - ui.setMethodGet(origine.getMethodGet()); - ui.setMethodSet(origine.getMethodSet()); - ui.setBean(origine.getBean()); - EquationContinuousDomain equationDomain = (EquationContinuousDomain) domain; - ui.addDomain(equationDomain); - ui.setTable(); + DefaultContinuousPanelUI continuousPanel = null; + if (component instanceof InputOneEquationUI) { + InputOneEquationUI origine = (InputOneEquationUI) component; + EquationContinuousPanelUI ui = new EquationContinuousPanelUI( + new JAXXInitialContext().add(new InputAction())); + ui.setLblText(origine.getLblText()); + ui.setNameEquation(origine.getNameEquation()); + ui.getEditor().getEditor().setText((String) factor.getValue()); + ui.setClazz(origine.getClazz()); + ui.setMethodGet(origine.getMethodGet()); + ui.setMethodSet(origine.getMethodSet()); + ui.setBean(origine.getBean()); - result = ui; - } else if (c instanceof MatrixEditor) { - MatrixContinuousPanelUI panel = new MatrixContinuousPanelUI(); - MatrixContinuousDomain matrixDomain = (MatrixContinuousDomain) domain; - MatrixND m = matrixDomain.getMatrix(); - if (m != null) { - panel.setMatrix(m.clone()); - } - panel.getOperator().setSelectedItem(matrixDomain.getOperator()); - panel.getCoef().setText(String.valueOf(matrixDomain.getCoefficient() * 100)); - result = panel; - } else { - continuousPanel = new DefaultContinuousPanelUI(); - result = continuousPanel; + EquationContinuousDomain equationDomain = (EquationContinuousDomain) domain; + ui.addDomain(equationDomain); + ui.setTable(); + + result = ui; + } else if (component instanceof MatrixEditor) { + MatrixContinuousPanelUI panel = new MatrixContinuousPanelUI(); + MatrixContinuousDomain matrixDomain = (MatrixContinuousDomain) domain; + MatrixND m = matrixDomain.getMatrix(); + if (m != null) { + panel.setMatrix(m.clone()); } - if (continuousPanel != null) { - continuousPanel.init(new JTextField(String.valueOf(domain - .getMinBound())), new JTextField(String.valueOf(domain - .getMaxBound()))); - } - } catch (Exception ex) { - log.error(ex); + panel.getOperator().setSelectedItem(matrixDomain.getOperator()); + panel.getCoef().setText( + String.valueOf(matrixDomain.getCoefficient() * 100)); + result = panel; + } else { + continuousPanel = new DefaultContinuousPanelUI(); + result = continuousPanel; } + if (continuousPanel != null) { + continuousPanel.init(new JTextField(String.valueOf(domain + .getMinBound())), new JTextField(String.valueOf(domain + .getMaxBound()))); + } + return result; } - public static JComponent getEditorWithValue(JComponent c) { - return getEditorWithValue(c, getValue(c)); + /** + * Get new instance of component filled with original swing component value. + * + * @param component component + * @return new component instance + */ + public static JComponent getEditorWithValue(JComponent component) { + Object value = getValue(component); + return getEditorWithValue(component, value); } - public static JComponent getEditorWithValue(JComponent c, Object value) { + /** + * Get new instance of component filled with specified value depending + * of component type. + * + * @param component component + * @param value value + * @return new component instance + */ + public static JComponent getEditorWithValue(JComponent component, Object value) { JComponent result = null; + try { - result = c.getClass().newInstance(); + result = component.getClass().newInstance(); if (result instanceof JTextComponent) { ((JTextComponent) result).setText(String.valueOf(value)); - } else if (result instanceof NumberEditor) { JTextField numEditor = new JTextField(); numEditor.setText(String.valueOf(value)); result = numEditor; - - } else if (result instanceof JTable) { - // ((JTable) result).setModel(((JTable)c).getModel()); - } else if (result instanceof RangeOfValuesUI) { result = new JTextField(value.toString()); } else if (result instanceof MatrixEditor) { - MatrixEditor ui = (MatrixEditor) c; + MatrixEditor ui = (MatrixEditor) component; MatrixND m = (MatrixND) value; MatrixPanelEditor matrix = new MatrixPanelEditor(false); if (m != null) { @@ -350,37 +397,36 @@ matrix.setLinearModelShowDefault(ui.isLinearModelShowDefault()); result = matrix; } else if (result instanceof JComboBox) { - JComboBox combo = (JComboBox) c; + JComboBox combo = (JComboBox) component; JComboBox comboResult = new JComboBox(); comboResult.setModel(combo.getModel()); comboResult.setSelectedItem(value); result = comboResult; - } else if (result instanceof JAXXList) { - JAXXList list = (JAXXList) c; - JAXXList listResult = new JAXXList(); + } else if (result instanceof JList) { + JList list = (JList) component; + JList listResult = new JList(); listResult.setModel(list.getModel()); - listResult.setSelectedValues((Object[]) value); + //listResult.setSelectedValues((Object[]) value); listResult.setSelectedIndices(list.getSelectedIndices()); result = listResult; } else if (result instanceof JCheckBox) { ((JCheckBox) result).setSelected((Boolean) value); - JCheckBox ch = (JCheckBox) c; + JCheckBox ch = (JCheckBox) component; ((JCheckBox) result).setText(ch.getText()); } else if (result instanceof JRadioButton) { ((JRadioButton) result).setSelected((Boolean) value); - JRadioButton cOrigin = (JRadioButton) c; + JRadioButton cOrigin = (JRadioButton) component; ((JRadioButton) result).setText(cOrigin.getText()); } else if (result instanceof SpeciesStructuredUI) { - SpeciesStructuredUI origine = (SpeciesStructuredUI) c; + //SpeciesStructuredUI origine = (SpeciesStructuredUI) component; SpeciesStructuredUI ui = new SpeciesStructuredUI(); ui.getFieldSpeciesDynamicAge().setSelected((Boolean) value); ui.setActif(true); result = ui; } else if (result instanceof InputOneEquationUI) { - InputOneEquationUI origine = (InputOneEquationUI) c; - InputOneEquationUI ui = new InputOneEquationUI( - new JAXXInitialContext().add(new InputAction())); + InputOneEquationUI origine = (InputOneEquationUI) component; + InputOneEquationUI ui = new InputOneEquationUI(new JAXXInitialContext().add(new InputAction())); ui.getEditor().setText((String) value); ui.setLblText(origine.getLblText()); ui.setNameEquation(origine.getNameEquation()); @@ -391,25 +437,23 @@ result = ui; } else if (result instanceof IntervalPanel) { IntervalPanel ipResult = new IntervalPanel(); - IntervalPanel ip = (IntervalPanel) c; + IntervalPanel ip = (IntervalPanel) component; ipResult.setLabelRenderer(Month.MONTH); ipResult.setModel(ip.getModel().clone()); result = ipResult; } else if (result instanceof SelectivityEditorUI) { - SelectivityEditorUI origine = (SelectivityEditorUI) c; + SelectivityEditorUI origine = (SelectivityEditorUI) component; SelectivityEditorUI ui = new SelectivityEditorUI( new JAXXInitialContext().add(new InputAction()).add( - origine.getRegion()).add( - new InputSaveVerifier())); + origine.getRegion()).add(new InputSaveVerifier())); ui.setBean(origine.getBean()); - ui.getBean().setPopulationSelectivity( - (Collection<Selectivity>) value); + ui.getBean().setPopulationSelectivity((Collection<Selectivity>) value); ui.setActif(true); ui.refresh(); ui.setActif(true); result = ui; } else if (result instanceof MetierSeasonInfoSpeciesEditorUI) { - MetierSeasonInfoSpeciesEditorUI origine = (MetierSeasonInfoSpeciesEditorUI) c; + MetierSeasonInfoSpeciesEditorUI origine = (MetierSeasonInfoSpeciesEditorUI) component; MetierSeasonInfoSpeciesEditorUI ui = new MetierSeasonInfoSpeciesEditorUI( new JAXXInitialContext().add(new InputAction()).add( origine.getRegion()).add( @@ -417,144 +461,155 @@ ui.setBean(origine.getBean()); if (origine.getMetierSeasonInfo() != null) { ui.setMetierSeasonInfo(origine.getMetierSeasonInfo()); - ui.getMetierSeasonInfo().setSpeciesTargetSpecies( - (Collection<TargetSpecies>) value); + ui.getMetierSeasonInfo().setSpeciesTargetSpecies((Collection<TargetSpecies>) value); ui.setMetierSeasonSelected(true); ui.setActif(true); } ui.refresh(); result = ui; } else if (result instanceof PopulationZonesEditorUI) { - PopulationZonesEditorUI origine = (PopulationZonesEditorUI) c; + PopulationZonesEditorUI origine = (PopulationZonesEditorUI) component; PopulationZonesEditorUI ui = new PopulationZonesEditorUI( - new JAXXInitialContext().add(new InputAction()).add( - origine.getRegion())); + new JAXXInitialContext().add(new InputAction()).add(origine.getRegion())); ui.setBean(origine.getBean()); MatrixND m = (MatrixND) value; - ui.getFieldPopulationMappingZoneReproZoneRecru().setMatrix( - m == null ? null : m.clone()); + ui.getFieldPopulationMappingZoneReproZoneRecru().setMatrix(m == null ? null : m.clone()); ui.setActif(true); ui.refresh(); result = ui; } else if (result instanceof PopulationMigrationMigrationUI) { - PopulationMigrationMigrationUI origine = (PopulationMigrationMigrationUI) c; + PopulationMigrationMigrationUI origine = (PopulationMigrationMigrationUI) component; PopulationMigrationMigrationUI ui = new PopulationMigrationMigrationUI( new JAXXInitialContext().add(new InputAction())); ui.setBean(origine.getBean()); ui.setPopInfo(origine.getPopInfo()); MatrixND m = (MatrixND) value; - ui.getPopInfo() - .setMigrationMatrix(m == null ? null : m.clone()); + ui.getPopInfo().setMigrationMatrix(m == null ? null : m.clone()); ui.setActif(true); ui.refreshPanel(); result = ui; } else if (result instanceof PopulationMigrationEmigrationUI) { - PopulationMigrationEmigrationUI origine = (PopulationMigrationEmigrationUI) c; + PopulationMigrationEmigrationUI origine = (PopulationMigrationEmigrationUI) component; PopulationMigrationEmigrationUI ui = new PopulationMigrationEmigrationUI( new JAXXInitialContext().add(new InputAction())); ui.setBean(origine.getBean()); ui.setPopInfo(origine.getPopInfo()); MatrixND m = (MatrixND) value; - ui.getPopInfo().setEmigrationMatrix( - m == null ? null : m.clone()); + ui.getPopInfo().setEmigrationMatrix(m == null ? null : m.clone()); ui.setActif(true); ui.refreshPanel(); result = ui; } else if (result instanceof PopulationMigrationImmigrationUI) { - PopulationMigrationImmigrationUI origine = (PopulationMigrationImmigrationUI) c; + PopulationMigrationImmigrationUI origine = (PopulationMigrationImmigrationUI) component; PopulationMigrationImmigrationUI ui = new PopulationMigrationImmigrationUI( new JAXXInitialContext().add(new InputAction())); ui.setBean(origine.getBean()); ui.setPopInfo(origine.getPopInfo()); MatrixND m = (MatrixND) value; - ui.getPopInfo().setImmigrationMatrix( - m == null ? null : m.clone()); + ui.getPopInfo().setImmigrationMatrix(m == null ? null : m.clone()); ui.setActif(true); ui.refreshPanel(); result = ui; } - } catch (Exception ex) { - log.error(ex); + } catch (IllegalAccessException ex) { + if (log.isErrorEnabled()) { + log.error("Can't make new instance of " + component, ex); + } + } catch (InstantiationException ex) { + if (log.isErrorEnabled()) { + log.error("Can't make new instance of " + component, ex); + } } return result; } - public static Object getValue(JComponent c) { + /** + * Return value in swing component that could be next used into factor. + * + * @param component component + * @return factor value + */ + public static Object getValue(JComponent component) { Object result = null; - if (c instanceof JTextComponent) { - result = ((JTextComponent) c).getText(); - } else if (c instanceof NumberEditor) { - result = ((NumberEditor) c).getModel(); - } else if (c instanceof PopulationZonesEditorUI) { - result = ((PopulationZonesEditorUI) c) + if (component instanceof JTextComponent) { + result = ((JTextComponent) component).getText(); + } else if (component instanceof NumberEditor) { + result = ((NumberEditor) component).getModel(); + } else if (component instanceof PopulationZonesEditorUI) { + result = ((PopulationZonesEditorUI) component) .getFieldPopulationMappingZoneReproZoneRecru().getMatrix(); - } else if (c instanceof JTable) { - // ((JTable) result).setText(BeanUtils.getProperty(e, fieldName)); + } else if (component instanceof MatrixPanelEditor) { + result = ((MatrixPanelEditor) component).getMatrix(); - } else if (c instanceof MatrixPanelEditor) { - result = ((MatrixPanelEditor) c).getMatrix(); + } else if (component instanceof JComboBox) { + result = ((JComboBox) component).getSelectedItem(); - } else if (c instanceof JComboBox) { - result = ((JComboBox) c).getSelectedItem(); + } else if (component instanceof JList) { + result = ((JList) component).getSelectedValues(); - } else if (c instanceof JList) { - result = ((JList) c).getSelectedValues(); + } else if (component instanceof JCheckBox) { + result = ((JCheckBox) component).isSelected(); - } else if (c instanceof JCheckBox) { - result = ((JCheckBox) c).isSelected(); + } else if (component instanceof JRadioButton) { + result = ((JRadioButton) component).isSelected(); - } else if (c instanceof JRadioButton) { - result = ((JRadioButton) c).isSelected(); + } else if (component instanceof InputOneEquationUI) { + result = ((InputOneEquationUI) component).getEditor().getText(); - } else if (c instanceof InputOneEquationUI) { - result = ((InputOneEquationUI) c).getEditor().getText(); + } else if (component instanceof SpeciesStructuredUI) { + result = ((SpeciesStructuredUI) component) + .getFieldSpeciesDynamicAge().isSelected(); - } else if (c instanceof IntervalPanel) { - // ((IntervalPanel) result).setModel((BeanUtils.getProperty(e, fieldName))); - - } else if (c instanceof SpeciesStructuredUI) { - result = ((SpeciesStructuredUI) c).getFieldSpeciesDynamicAge() - .isSelected(); - - } else if (c instanceof SelectivityEditorUI) { - result = ((SelectivityEditorUI) c).getBean() + } else if (component instanceof SelectivityEditorUI) { + result = ((SelectivityEditorUI) component).getBean() .getPopulationSelectivity(); - } else if (c instanceof MetierSeasonInfoSpeciesEditorUI) { - result = ((MetierSeasonInfoSpeciesEditorUI) c) + } else if (component instanceof MetierSeasonInfoSpeciesEditorUI) { + result = ((MetierSeasonInfoSpeciesEditorUI) component) .getMetierSeasonInfo().getSpeciesTargetSpecies(); - } else if (c instanceof PopulationZonesEditorUI) { - result = ((PopulationZonesEditorUI) c) + } else if (component instanceof PopulationZonesEditorUI) { + result = ((PopulationZonesEditorUI) component) .getFieldPopulationMappingZoneReproZoneRecru().getMatrix(); - } else if (c instanceof RangeOfValuesUI) { + } /*else if (component instanceof RangeOfValuesUI) { - } else if (c instanceof PopulationMigrationMigrationUI) { - result = ((PopulationMigrationMigrationUI) c).getPopInfo() + } */else if (component instanceof PopulationMigrationMigrationUI) { + result = ((PopulationMigrationMigrationUI) component).getPopInfo() .getMigrationMatrix(); - } else if (c instanceof PopulationMigrationEmigrationUI) { - result = ((PopulationMigrationEmigrationUI) c).getPopInfo() + } else if (component instanceof PopulationMigrationEmigrationUI) { + result = ((PopulationMigrationEmigrationUI) component).getPopInfo() .getEmigrationMatrix(); - } else if (c instanceof PopulationMigrationImmigrationUI) { - result = ((PopulationMigrationImmigrationUI) c).getPopInfo() - .getImmigrationMatrix(); + } else if (component instanceof PopulationMigrationImmigrationUI) { + result = ((PopulationMigrationImmigrationUI) component) + .getPopInfo().getImmigrationMatrix(); } return result; } - public static boolean isRangeOfValue(JComponent c) { - if (c instanceof RangeOfValuesUI) { + /** + * Return if component is instanceof {@link RangeOfValuesUI}. + * @param component component + * @return {@code true} if component is intance of {@link RangeOfValuesUI} + */ + public static boolean isRangeOfValue(JComponent component) { + if (component instanceof RangeOfValuesUI) { return true; } return false; } - public static boolean isContinue(JComponent c) { - if (c instanceof RangeOfValuesUI) { - RangeOfValuesUI ui = (RangeOfValuesUI) c; + /** + * Return if component is is continue factor enable. + * + * @param component component + * @return {@code true} if component is is continue factor enable + */ + public static boolean isContinue(JComponent component) { + if (component instanceof RangeOfValuesUI) { + RangeOfValuesUI ui = (RangeOfValuesUI) component; if (ui.getFieldGearParamType().getSelectedItem().equals("Float")) { String value = ui.getFieldGearParamPossibleValue().getText(); if (value.matches("^\\ *[0-9]*\\ *\\-\\ *[0-9]*\\ *$")) { @@ -565,19 +620,27 @@ return false; } - public static boolean canBeContinue(JComponent c, TopiaEntity e) { - String fieldName = (String) c.getClientProperty("method"); - if (c instanceof JTextComponent) { - Object o = callMethod(e, fieldName); - return canBeContinue(c, o); - } else if (c instanceof NumberEditor) { + /** + * Return true if component or entity can be defined in continuous factor. + * + * @param component component + * @param entity entity + * @return continuous enabled + */ + public static boolean canBeContinuous(JComponent component, + TopiaEntity entity) { + String fieldName = (String) component.getClientProperty("method"); + if (component instanceof JTextComponent) { + Object o = getMethodValue(entity, fieldName); + return canBeContinue(component, o); + } else if (component instanceof NumberEditor) { return true; - } else if (c instanceof InputOneEquationUI) { + } else if (component instanceof InputOneEquationUI) { return true; - } else if (c instanceof MatrixEditor) { + } else if (component instanceof MatrixEditor) { return true; - } else if (c instanceof RangeOfValuesUI) { - RangeOfValuesUI ui = (RangeOfValuesUI) c; + } else if (component instanceof RangeOfValuesUI) { + RangeOfValuesUI ui = (RangeOfValuesUI) component; if (ui.getFieldGearParamType().getSelectedItem().equals("Float")) { return true; } @@ -585,26 +648,44 @@ return false; } - public static boolean canBeContinue(JComponent c, Object o) { - if (c instanceof JTextComponent) { - if (Double.class.isInstance(o)) { + /** + * Return true if component or value can be defined in continuous factor. + * + * @param component component + * @param value value + * @return continuous enabled + */ + public static boolean canBeContinue(JComponent component, Object value) { + if (component instanceof JTextComponent) { + if (value instanceof Double) { return true; - } else if (Long.class.isInstance(o)) { + } else if (value instanceof Long) { return true; - } else if (InputOneEquationUI.class.isInstance(c)) { + } + /* always false + else if (InputOneEquationUI.class.isInstance(component)) { return true; - } + }*/ } return false; } - protected static Object callMethod(TopiaEntity e, String fieldName) { + /** + * Get value for fieldName in entity. + * + * @param entity + * @param fieldName + * @return + */ + protected static Object getMethodValue(TopiaEntity entity, String fieldName) { Object result = null; try { - Method m = e.getClass().getMethod("get" + fieldName, null); - result = m.invoke(e, (Object[]) null); + Method m = entity.getClass().getMethod("get" + fieldName); + result = m.invoke(entity, (Object[]) null); } catch (Exception ex) { - log.error(ex); + if (log.isErrorEnabled()) { + log.error(ex); + } } return result; } Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -40,11 +40,11 @@ import org.apache.commons.lang.StringUtils; protected String[] columnNames = { - _("isisfish.factor.equation.variable.name"), - _("isisfish.factor.equation.variable.value"), - _("isisfish.factor.equation.variable.coefficient"), - _("isisfish.factor.equation.variable.operator"), - _("isisfish.factor.equation.variable.action")}; + _("isisfish.sensitivity.equation.variable.name"), + _("isisfish.sensitivity.equation.variable.value"), + _("isisfish.sensitivity.equation.variable.coefficient"), + _("isisfish.sensitivity.equation.variable.operator"), + _("isisfish.sensitivity.equation.variable.action")}; protected java.util.List<EquationContinuousDomain> datas = new ArrayList<EquationContinuousDomain>(); protected java.util.List<JComboBox> operateurs = new ArrayList<JComboBox>(); protected java.util.List<JButton> actions = new ArrayList<JButton>(); @@ -94,7 +94,7 @@ } else if (columnIndex == 3) { return datas.get(rowIndex).getOperator(); } else if (columnIndex == 4) { - return _("isisfish.factor.validDiscretNumber"); + return _("isisfish.sensitivity.validDiscretNumber"); } return null; } @@ -145,7 +145,7 @@ } protected void newButton(){ JButton result = new JButton(); - result.setText(_("isisfish.factor.validDiscretNumber")); + result.setText(_("isisfish.sensitivity.validDiscretNumber")); actions.add(result); result.addActionListener(new ActionListener() { Deleted: 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-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -1,119 +0,0 @@ -/* *##% - * 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. - *##%*/ - -package fr.ifremer.isisfish.ui.sensitivity; - -import static org.nuiton.i18n.I18n._; - -import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; -import fr.ifremer.isisfish.ui.simulator.SimulAction; -import java.io.Serializable; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import javax.swing.JComponent; -import javax.swing.JOptionPane; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.math.matrix.MatrixND; -import org.nuiton.topia.persistence.TopiaEntity; - -/** - * - * @author letellier - */ -public class FactorAction { - - /** to use log facility, just put in your code: log.info(\"...\"); */ - private static Log log = LogFactory.getLog(FactorAction.class); - - public static void saveContinue(JComponent cOrigine, String name, String comment, String path, ContinuousPanelContainerUI panel, SimulAction action, boolean exist){ - DefaultContinuousPanelUI defaultPanel = null; - if (MatrixContinuousPanelUI.class.isInstance(panel)){ - MatrixContinuousPanelUI matrixPanel = (MatrixContinuousPanelUI)panel; - Double coef = Double.valueOf(matrixPanel.getCoef().getText()) / 100; - MatrixND matrix = matrixPanel.getMatrix(); - String operateur = (String)matrixPanel.getOperator().getSelectedItem(); - action.addContinuousMatrixFactor(name, comment, path, coef, matrix, operateur, cOrigine, exist); - - } else if (EquationContinuousPanelUI.class.isInstance(panel)){ - try { - EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; - - TopiaEntity bean = equationPanel.getBean(); - String methodSet = equationPanel.getMethodSet(); - Method m = bean.getClass().getMethod("set" + methodSet, String.class); - m.invoke(bean, equationPanel.getEditor().getEditor().getText()); - - // Save equation - bean.update(); - bean.getTopiaContext().commitTransaction(); - - List<EquationContinuousDomain> domains = equationPanel.getDomains(); - for (EquationContinuousDomain domain : domains) { - if (domain.getReferenceValue() != null - && domain.getCoefficient() != null - && domain.getCoefficient() <= 100 - && domain.getCoefficient() > 0 - && domain.getOperator() != null - && domain.getVariableName() != null ){ - action.addContinuousEquationFactor(name, comment, path, domain, cOrigine, exist); - } else { - log.warn("domain: " + domain); - log.warn("domain invalid: " + - "domain.getReferenceValue() != null(" + - (domain.getReferenceValue()) + - ") domain.getCoefficient() != null(" + - (domain.getCoefficient()) + - ") domain.getCoefficient() <= 100 (" + - (domain.getCoefficient()) + - ") domain.getCoefficient() > 0 (" + - (domain.getCoefficient()) + - ") domain.getOperator() != null (" + - (domain.getOperator()) + - ") domain.getVariableName() != null(" + - (domain.getVariableName()) + - ")"); - JOptionPane.showMessageDialog(equationPanel, _("isisfish.error.factor.invalid") + domain.getVariableName()); - } - } - } catch (Exception ex) { - if (log.isErrorEnabled()) { - log.error("Can't call method : ", ex); - } - } - } else if (DefaultContinuousPanelUI.class.isInstance(panel)){ - defaultPanel = (DefaultContinuousPanelUI)panel; - action.addContinuousFactor(name, comment, path, getMin(defaultPanel), getMax(defaultPanel), cOrigine, exist); - } - } - protected static Double getMin(DefaultContinuousPanelUI defaultPanel){ - return Double.parseDouble(defaultPanel.getMin()); - } - protected static Double getMax(DefaultContinuousPanelUI defaultPanel){ - return Double.parseDouble(defaultPanel.getMax()); - } - public static void saveDiscret(JComponent cOrigine, String name, String comment, String path, List<JComponent> components, SimulAction action, boolean exist){ - List<Serializable> values = new ArrayList<Serializable>(); - for(JComponent c: components){ - values.add((Serializable)EditorHelper.getValue(c)); - } - action.addDiscreteFactor(name, comment, path, values, cOrigine, exist); - } -} -; \ No newline at end of file Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeCellRenderer.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeCellRenderer.java 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeCellRenderer.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2009 Code Lutin + * 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 @@ -33,10 +33,10 @@ * Factor tree cell renderer. * * @author chatellier - * @version $Revision: 1.0 $ + * @version $Revision$ * - * Last update : $Date: 9 mars 2009 $ - * By : $Author: chatellier $ + * Last update : $Date$ + * By : $Author$ */ public class FactorTreeCellRenderer extends DefaultTreeCellRenderer { @@ -53,10 +53,10 @@ JLabel c = (JLabel)super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - if (value instanceof List) { - c.setText(_("isisfish.factor.factors") + " : "); + if (value instanceof List<?>) { + c.setText(_("isisfish.sensitivity.factors") + " : "); } - else if (value instanceof Factor) { + else if (value instanceof Factor<?, ?>) { Factor<? ,?> factor = (Factor<?, ?>)value; if (factor.getDomain() instanceof EquationContinuousDomain) { Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeCellRenderer.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModel.java 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModel.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -32,10 +32,10 @@ * Cette classe gere l'affichage d'une liste de facteurs dans l'arbre. * * @author chatellier - * @version $Revision: 2011 $ + * @version $Revision$ * * Last update : $Date: 2008-06-13 11:05:57 +0200 (ven., 13 juin 2008) - * $ By : $Author: chatellier $ + * $ By : $Author$ */ public class FactorTreeModel implements TreeModel { Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorTreeModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *##%*/ --> -<JDialog id="FactorTypeChooser" title='isisfish.factor.title' modal='{true}' layout='{new BorderLayout()}'> +<JDialog title='isisfish.sensitivity.title' modal='{true}' layout='{new BorderLayout()}'> <Boolean id='continuePossible' javaBean='true'/> @@ -43,29 +43,25 @@ protected ContinuousPanelContainerUI continuousPanel = null; protected Factor factor = null; -addPropertyChangeListener("continuePossible", new PropertyChangeListener(){ - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (continuousPanel != null){ - continuousPanel.setContinuePossible((Boolean)evt.getNewValue()); - } +addPropertyChangeListener("continuePossible", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (continuousPanel != null) { + continuousPanel.setContinuePossible((Boolean)evt.getNewValue()); } - + } }); -addPropertyChangeListener("continueSelected", new PropertyChangeListener(){ - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (continuousPanel != null){ - continuousPanel.setContinueSelected((Boolean)evt.getNewValue()); - } +addPropertyChangeListener("continueSelected", new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (continuousPanel != null) { + continuousPanel.setContinueSelected((Boolean)evt.getNewValue()); } - + } }); -public void initNew(JComponent c, TopiaEntity be, Boolean b){ +public void initNew(JComponent c, TopiaEntity be, Boolean b) { this.bean = be; this.cOrigine = c; @@ -80,9 +76,9 @@ setContinuePossible(b); boolean selected = EditorHelper.isContinue(cOrigine); setContinueSelected(selected); - continueRadion.setSelected(selected); + continueRadio.setSelected(selected); if (isContinuePossible()){ - if (EditorHelper.isRangeOfValue(cOrigine)){ + if (EditorHelper.isRangeOfValue(cOrigine)) { continuousPanel = EditorHelper.getContinuousRangeOfValuePanel(cOrigine, bean); } else { @@ -90,23 +86,23 @@ } init(); } - if (!isContinueSelected() && EditorHelper.isRangeOfValue(cOrigine)){ + if (!isContinueSelected() && EditorHelper.isRangeOfValue(cOrigine)) { int i = 0; - for (String s : EditorHelper.getDiscretRangeOfValueValues(cOrigine, bean)){ + for (String s : EditorHelper.getDiscretRangeOfValueValues(cOrigine, bean)) { JTextField text = new JTextField(s); discretComponents.add(text); tabPane.add(text, "Factor " + (i+1)); i++; } } - if (continuousPanel != null){ + if (continuousPanel != null) { continuousPanel.setContinueSelected(selected); } setContinueSelected(EditorHelper.isContinue(cOrigine)); setSaveEnabled(!factorName.getText().equals("")); } -public void initExisting(JComponent cOrigine, Factor f){ +public void initExisting(JComponent cOrigine, Factor f) { setExistingValue(true); this.cOrigine = cOrigine; this.path = f.getPath(); @@ -115,16 +111,16 @@ Domain domain = f.getDomain(); this.factor = f; - if (ContinuousDomain.class.isInstance(domain)){ + if (domain instanceof ContinuousDomain) { ContinuousDomain cDomain = (ContinuousDomain) domain; continuousPanel = EditorHelper.getContinuousPanelWithValue(cOrigine, cDomain, f); init(); - continueRadion.setSelected(true); + continueRadio.setSelected(true); setContinueSelected(true); setContinuePossible(true); - }else{ + } else { DiscreteDomain dDomain = (DiscreteDomain)domain; int nb = dDomain.getValues().size(); @@ -140,7 +136,7 @@ i++; cache = o; JComponent c = null; - if (o != null){ + if (o != null) { c = EditorHelper.getEditorWithValue(cOrigine, o); } else { @@ -156,18 +152,18 @@ } setSaveEnabled(!factorName.getText().equals("")); } -protected void init(){ +protected void init() { continuousPanelContainer.add(continuousPanel, BorderLayout.CENTER); this.pack(); } -protected JComponent getNewComponent(){ +protected JComponent getNewComponent() { return EditorHelper.getEditor(cOrigine, bean); } -protected void addTabs(String sNbTab){ +protected void addTabs(String sNbTab) { int nbTab = Integer.parseInt(sNbTab); discretComponents.clear(); tabPane.removeAll(); - for (int i=0;i<nbTab;i++){ + for (int i=0;i<nbTab;i++) { JComponent c = getNewComponent(); discretComponents.add(c); JScrollPane js = new JScrollPane(c); @@ -175,35 +171,35 @@ } this.pack(); } -protected FactorAction getFactorAction(){ - return getContextValue(FactorAction.class); +protected SensitivityAction getSensitivityAction() { + return getContextValue(SensitivityAction.class); } -protected SimulAction getSimulAction(){ +protected SimulAction getSimulAction() { return getContextValue(SimulAction.class); } -protected void save(){ - if (continueRadion.isSelected()){ - getFactorAction().saveContinue(cOrigine, factorName.getText(), comment.getText(), path, continuousPanel, getSimulAction(), isExistingValue()); +protected void save() { + if (continueRadio.isSelected()) { + getSensitivityAction().saveContinue(cOrigine, factorName.getText(), comment.getText(), path, continuousPanel, getSimulAction(), isExistingValue()); } else { - getFactorAction().saveDiscret(cOrigine, factorName.getText(), comment.getText(), path, discretComponents, getSimulAction(), isExistingValue()); + getSensitivityAction().saveDiscret(cOrigine, factorName.getText(), comment.getText(), path, discretComponents, getSimulAction(), isExistingValue()); } getContextValue(InputSaveVerifier.class).getSensPanel().setFactorModel(); exit(); } -protected void remove(){ +protected void remove() { getSimulAction().removeFactor(factor); getContextValue(InputSaveVerifier.class).getSensPanel().setFactorModel(); exit(); } -protected void exit(){ +protected void exit() { this.dispose(); } - ]]> - </script> + ]]> + </script> <Table constraints='BorderLayout.CENTER'> <row> <cell columns='1' fill='horizontal'> - <JLabel text='isisfish.factor.name'/> + <JLabel text='isisfish.sensitivity.name'/> </cell> <cell columns='3' fill='horizontal' weightx='1'> <JTextField id='factorName' onKeyReleased='setSaveEnabled(!factorName.getText().equals(""))'/> @@ -211,7 +207,7 @@ </row> <row> <cell columns='4' fill='horizontal' weightx='1'> - <JRadioButton id='continueRadion' text='isisfish.factor.continue' buttonGroup='factorType' visible='{isContinuePossible()}' selected='{false}' onActionPerformed='setContinueSelected(continueRadion.isSelected())'/> + <JRadioButton id='continueRadio' text='isisfish.sensitivity.continue' buttonGroup='factorType' visible='{isContinuePossible()}' selected='{false}' onActionPerformed='setContinueSelected(continueRadio.isSelected())'/> </cell> </row> <row> @@ -221,18 +217,18 @@ </row> <row> <cell columns='4' fill='horizontal' weightx='1'> - <JRadioButton id='discret' text='isisfish.factor.discret' selected='{true}' buttonGroup='factorType' onActionPerformed='setContinueSelected(continueRadion.isSelected())'/> + <JRadioButton id='discret' text='isisfish.sensitivity.discret' selected='{true}' buttonGroup='factorType' onActionPerformed='setContinueSelected(continueRadio.isSelected())'/> </cell> </row> <row> <cell fill='horizontal'> - <JLabel text='isisfish.factor.selectDiscretNumber' enabled='{!isContinueSelected()}'/> + <JLabel text='isisfish.sensitivity.selectDiscretNumber' enabled='{!isContinueSelected()}'/> </cell> <cell fill='horizontal' weightx='0.5'> <JTextField id='discretNumber' enabled='{!isContinueSelected()}'/> </cell> <cell columns='2' fill='horizontal' weightx='0.5'> - <JButton text='isisfish.factor.validDiscretNumber' enabled='{!isContinueSelected()}' onActionPerformed='addTabs(discretNumber.getText())'/> + <JButton text='isisfish.sensitivity.validDiscretNumber' enabled='{!isContinueSelected()}' onActionPerformed='addTabs(discretNumber.getText())'/> </cell> </row> <row> @@ -242,7 +238,7 @@ </row> <row> <cell columns='4' fill='horizontal'> - <JLabel text='isisfish.factor.comment'/> + <JLabel text='isisfish.sensitivity.comment'/> </cell> </row> <row> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -24,7 +24,7 @@ <Table id='content' constraints='BorderLayout.CENTER'> <row> <cell fill='horizontal'> - <JLabel text='isisfish.factor.value' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> + <JLabel text='isisfish.sensitivity.value' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> <cell fill='both' weightx='1' weighty='1'> <org.nuiton.math.matrix.gui.MatrixPanelEditor id='componentPanel' dimensionEdit='{false}' @@ -34,7 +34,7 @@ </row> <row> <cell fill='horizontal'> - <JLabel text='isisfish.factor.coefficient' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> + <JLabel text='isisfish.sensitivity.coefficient' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> <cell fill='both' columns='2' weightx='1' weighty='1'> <JTextField id='coef' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> @@ -42,7 +42,7 @@ </row> <row> <cell fill='horizontal'> - <JLabel text='isisfish.factor.operateur' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> + <JLabel text='isisfish.sensitivity.operator' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> <cell fill='horizontal' weightx='1' columns='3'> <JComboBox id='operator' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'> Copied: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java (from rev 2668, isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorAction.java) =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -0,0 +1,138 @@ +/* *##% + * 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. + *##%*/ + +package fr.ifremer.isisfish.ui.sensitivity; + +import static org.nuiton.i18n.I18n._; + +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; +import fr.ifremer.isisfish.ui.simulator.SimulAction; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.math.matrix.MatrixND; +import org.nuiton.topia.persistence.TopiaEntity; + +/** + * Action for sensitivity package. + * + * @author letellier + * @version $Revision$ + * + * Last update: $Date$ + * by : $Author$ + */ +public class SensitivityAction { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static Log log = LogFactory.getLog(SensitivityAction.class); + + public void saveContinue(JComponent cOrigine, String name, + String comment, String path, ContinuousPanelContainerUI panel, + SimulAction action, boolean exist) { + DefaultContinuousPanelUI defaultPanel = null; + if (panel instanceof MatrixContinuousPanelUI) { + MatrixContinuousPanelUI matrixPanel = (MatrixContinuousPanelUI) panel; + Double coef = Double.valueOf(matrixPanel.getCoef().getText()) / 100; + MatrixND matrix = matrixPanel.getMatrix(); + String operateur = (String) matrixPanel.getOperator() + .getSelectedItem(); + action.addContinuousMatrixFactor(name, comment, path, coef, matrix, + operateur, cOrigine, exist); + + } else if (panel instanceof EquationContinuousPanelUI) { + try { + EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; + + TopiaEntity bean = equationPanel.getBean(); + String methodSet = equationPanel.getMethodSet(); + Method m = bean.getClass().getMethod("set" + methodSet, + String.class); + m.invoke(bean, equationPanel.getEditor().getEditor().getText()); + + // Save equation + bean.update(); + bean.getTopiaContext().commitTransaction(); + + List<EquationContinuousDomain> domains = equationPanel + .getDomains(); + for (EquationContinuousDomain domain : domains) { + if (domain.getReferenceValue() != null + && domain.getCoefficient() != null + && domain.getCoefficient() <= 100 + && domain.getCoefficient() > 0 + && domain.getOperator() != null + && domain.getVariableName() != null) { + action.addContinuousEquationFactor(name, comment, path, + domain, cOrigine, exist); + } else { + log.warn("domain: " + domain); + log.warn("domain invalid: " + + "domain.getReferenceValue() != null(" + + (domain.getReferenceValue()) + + ") domain.getCoefficient() != null(" + + (domain.getCoefficient()) + + ") domain.getCoefficient() <= 100 (" + + (domain.getCoefficient()) + + ") domain.getCoefficient() > 0 (" + + (domain.getCoefficient()) + + ") domain.getOperator() != null (" + + (domain.getOperator()) + + ") domain.getVariableName() != null(" + + (domain.getVariableName()) + ")"); + JOptionPane.showMessageDialog(equationPanel, + _("isisfish.error.factor.invalid") + + domain.getVariableName()); + } + } + } catch (Exception ex) { + if (log.isErrorEnabled()) { + log.error("Can't call method : ", ex); + } + } + } else if (panel instanceof DefaultContinuousPanelUI) { + defaultPanel = (DefaultContinuousPanelUI) panel; + action.addContinuousFactor(name, comment, path, + getMin(defaultPanel), getMax(defaultPanel), + cOrigine, exist); + } + } + + protected Double getMin(DefaultContinuousPanelUI defaultPanel) { + return Double.parseDouble(defaultPanel.getMin()); + } + + protected Double getMax(DefaultContinuousPanelUI defaultPanel) { + return Double.parseDouble(defaultPanel.getMax()); + } + + public void saveDiscret(JComponent cOrigine, String name, + String comment, String path, List<JComponent> components, + SimulAction action, boolean exist) { + List<Serializable> values = new ArrayList<Serializable>(); + for (JComponent c : components) { + values.add((Serializable) EditorHelper.getValue(c)); + } + action.addDiscreteFactor(name, comment, path, values, cOrigine, exist); + } +} \ No newline at end of file Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityChooserUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -121,8 +121,8 @@ factorsContinueCardinalities.add(continuousDomain.getCardinality() + ""); } } - model.addColumn(_("isisfish.factor.factor"), factorsContinue.toArray()); - model.addColumn(_("isisfish.factor.increment"), factorsContinueCardinalities.toArray()); + model.addColumn(_("isisfish.sensitivity.factor"), factorsContinue.toArray()); + model.addColumn(_("isisfish.sensitivity.increment"), factorsContinueCardinalities.toArray()); factorCardinality.setModel(model); factorCardinality.getModel().addTableModelListener(new TableModelListener() { Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityNavigationTreeSelectionAdapter.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabUI.jaxx 2009-11-17 15:38:42 UTC (rev 2760) @@ -30,20 +30,21 @@ <fr.ifremer.isisfish.entities.FisheryRegionImpl id='region' javaBean='null'/> <script><![CDATA[ +import javax.swing.JPopupMenu; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeNode; + import fr.ifremer.isisfish.datastore.RegionStorage; +import fr.ifremer.isisfish.simulator.sensitivity.Factor; import fr.ifremer.isisfish.ui.WelcomePanelUI; import fr.ifremer.isisfish.ui.input.InputAction; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; +import fr.ifremer.isisfish.ui.input.InputSaveVerifier; +import fr.ifremer.isisfish.ui.simulator.SimulAction; import jaxx.runtime.swing.navigation.NavigationTreeModel; -import fr.ifremer.isisfish.ui.input.InputSaveVerifier; import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; import jaxx.runtime.swing.navigation.NavigationUtil; -import fr.ifremer.isisfish.ui.simulator.SimulAction; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.TreeNode; -import javax.swing.JPopupMenu; -import fr.ifremer.isisfish.simulator.sensitivity.Factor; // end code constructor getVerifier().setSensPanel(this); @@ -100,6 +101,15 @@ wizard.pack(); wizard.setVisible(true); } + else { + + // factor path are : + // fr.ifremer.isisfish.entities.Strategy#1190373398255#0.7889364141850967#proportionSetOfVessels + if (log.isInfoEnabled()) { + log.info("UI not found for factor " + selectedFactor.getName()); + log.info(" with path " + selectedFactor.getPath()); + } + } } } } Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTabbedPaneListener.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2002-2009 Code Lutin, Benjamin Poussin + * Copyright (C) 2002-2009 Ifremer, Code Lutin, Benjamin Poussin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -22,6 +22,9 @@ import java.io.InputStream; import java.io.IOException; import java.util.Properties; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -40,10 +43,10 @@ private static final Log log = LogFactory.getLog(SensitivityUtils.class); /** Properties file resource path. */ - private final static String PROPERTIES_PATH = "/sensitivity.properties"; + protected final static String PROPERTIES_PATH = "/sensitivity.properties"; /** Cached properties. */ - private static Properties sensitivityProperties; + protected static Properties sensitivityProperties; /** * Is field sensitivity enabled. @@ -54,7 +57,7 @@ * @return <tt>true</tt> if factor name is sensitivity enabled */ public static boolean isSensitivityFactorEnabled(String sensitivityFactorName) { - Properties data = loadProperties(); + Properties data = getProperties(); return data.getProperty(sensitivityFactorName) != null; } @@ -65,7 +68,7 @@ * * @return properties */ - private static Properties loadProperties() { + protected static Properties getProperties() { if (sensitivityProperties == null) { sensitivityProperties = new Properties(); @@ -91,4 +94,29 @@ } return sensitivityProperties; } + + /** + * Return factor name for topiaId composed path. + * + * For example : + * fr.ifremer.isisfish.entities.Strategy#1190373398255#0.7889364141850967#proportionSetOfVessels + * will return : + * Strategy.proportionSetOfVessels + * + * @param path factor path + * @return factor name + */ + public static String getFactorNameForPath(String path) { + + Pattern pattern = Pattern.compile("^([^#]*\\.)?(\\w+).*#(\\w+)$"); + Matcher matcher = pattern.matcher(path); + + String result = null; + + if (matcher.find()) { + result = matcher.group(2) + "." + matcher.group(3); + } + + return result; + } } Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtils.java ___________________________________________________________________ Modified: svn:keywords - Author Date Revision + Author Date Id Revision Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2009-11-17 15:38:42 UTC (rev 2760) @@ -405,26 +405,6 @@ isisfish.export.directory=Export directory isisfish.export.saved=Export saved isisfish.export.title=Results export -isisfish.factor.coefficient=Coefficient (in %) -isisfish.factor.comment=Comment -isisfish.factor.continue=Continuous factor -isisfish.factor.discret=Discret factor -isisfish.factor.equation.variable.action=Action -isisfish.factor.equation.variable.coefficient=Coef. (in %) -isisfish.factor.equation.variable.name=Name -isisfish.factor.equation.variable.operator=Operator -isisfish.factor.equation.variable.value=Value -isisfish.factor.factor=Factor -isisfish.factor.factors=Factors -isisfish.factor.firstValue=First value -isisfish.factor.increment=Cardinality -isisfish.factor.lastValue=Last value -isisfish.factor.name=Factor name -isisfish.factor.operateur=Operator -isisfish.factor.selectDiscretNumber=Number of factors -isisfish.factor.title=Factor input -isisfish.factor.validDiscretNumber=Ok -isisfish.factor.value=Value isisfish.filter=Filter isisfish.filter.apply=Apply filter isisfish.filter.cancel=Cancel @@ -943,12 +923,31 @@ isisfish.selectivity.title=Selectivity isisfish.sens.backParameter=Back to parameter tab isisfish.sens.title=Simulation plan +isisfish.sensitivity.coefficient=Coefficient (in %) +isisfish.sensitivity.comment=Comment +isisfish.sensitivity.continue=Continuous factor +isisfish.sensitivity.discret=Discret factor isisfish.sensitivity.displaysecondpass=Display results +isisfish.sensitivity.equation.variable.action=Action +isisfish.sensitivity.equation.variable.coefficient=Coef. (in %) +isisfish.sensitivity.equation.variable.name=Name +isisfish.sensitivity.equation.variable.operator=Operator +isisfish.sensitivity.equation.variable.value=Value isisfish.sensitivity.export=Export +isisfish.sensitivity.factor=Factor +isisfish.sensitivity.factors=Factors +isisfish.sensitivity.firstValue=First value +isisfish.sensitivity.increment=Cardinality +isisfish.sensitivity.lastValue=Last value +isisfish.sensitivity.name=Factor name +isisfish.sensitivity.operator=Operator isisfish.sensitivity.secondpass=Analyze results isisfish.sensitivity.secondpass.title=Analyze results isisfish.sensitivity.select=Method +isisfish.sensitivity.selectDiscretNumber=Number of factors isisfish.sensitivity.title=Sensitivity analysis +isisfish.sensitivity.validDiscretNumber=Ok +isisfish.sensitivity.value=Value isisfish.sensitivityChooser.title=Sensitivities input isisfish.server.ssh.generateKey.title=Generate Ssh key isisfish.setOfVessels.comments=Comments Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-11-17 13:15:23 UTC (rev 2759) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2009-11-17 15:38:42 UTC (rev 2760) @@ -405,26 +405,6 @@ isisfish.export.directory=Dossier d'export isisfish.export.saved=Exports des r\u00E9sultats sauvegard\u00E9s isisfish.export.title=Export des r\u00E9sultats -isisfish.factor.coefficient=Coefficient (en %) -isisfish.factor.comment=Commentaires -isisfish.factor.continue=Facteur continu -isisfish.factor.discret=Facteur discret -isisfish.factor.equation.variable.action=Action -isisfish.factor.equation.variable.coefficient=Coef (en %) -isisfish.factor.equation.variable.name=Nom -isisfish.factor.equation.variable.operator=Op\u00E9rateur -isisfish.factor.equation.variable.value=Valeur -isisfish.factor.factor=Facteur -isisfish.factor.factors=Facteurs -isisfish.factor.firstValue=Premi\u00E8re valeur -isisfish.factor.increment=Cardinalit\u00E9 -isisfish.factor.lastValue=Derni\u00E8re valeur -isisfish.factor.name=Nom du facteur -isisfish.factor.operateur=Op\u00E9rateur -isisfish.factor.selectDiscretNumber=Nombre de facteurs -isisfish.factor.title=Saisie d'un facteur -isisfish.factor.validDiscretNumber=Valider -isisfish.factor.value=Valeur isisfish.filter=Filtrer isisfish.filter.apply=Appliquer le filtre isisfish.filter.cancel=Annuler @@ -943,12 +923,31 @@ isisfish.selectivity.title=S\u00E9lectivit\u00E9 isisfish.sens.backParameter=Retour aux param\u00E8tres isisfish.sens.title=Plan de simulation +isisfish.sensitivity.coefficient=Coefficient (en %) +isisfish.sensitivity.comment=Commentaires +isisfish.sensitivity.continue=Facteur continu +isisfish.sensitivity.discret=Facteur discret isisfish.sensitivity.displaysecondpass=Afficher les r\u00E9sultats +isisfish.sensitivity.equation.variable.action=Action +isisfish.sensitivity.equation.variable.coefficient=Coef (en %) +isisfish.sensitivity.equation.variable.name=Nom +isisfish.sensitivity.equation.variable.operator=Op\u00E9rateur +isisfish.sensitivity.equation.variable.value=Valeur isisfish.sensitivity.export=Export +isisfish.sensitivity.factor=Facteur +isisfish.sensitivity.factors=Facteurs +isisfish.sensitivity.firstValue=Premi\u00E8re valeur +isisfish.sensitivity.increment=Cardinalit\u00E9 +isisfish.sensitivity.lastValue=Derni\u00E8re valeur +isisfish.sensitivity.name=Nom du facteur +isisfish.sensitivity.operator=Op\u00E9rateur isisfish.sensitivity.secondpass=Analyse des r\u00E9sultats isisfish.sensitivity.secondpass.title=Analyse des r\u00E9sultats isisfish.sensitivity.select=M\u00E9thode +isisfish.sensitivity.selectDiscretNumber=Nombre de facteurs isisfish.sensitivity.title=Analyse de sensibilit\u00E9 +isisfish.sensitivity.validDiscretNumber=Valider +isisfish.sensitivity.value=Valeur isisfish.sensitivityChooser.title=M\u00E9thode de la sensibilit\u00E9 isisfish.server.ssh.generateKey.title=G\u00E9n\u00E9rer une cl\u00E9 SSH isisfish.setOfVessels.comments=Commentaires Added: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java =================================================================== --- isis-fish/trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java (rev 0) +++ isis-fish/trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java 2009-11-17 15:38:42 UTC (rev 2760) @@ -0,0 +1,136 @@ +/* *##% + * Copyright (C) 2009 Code Lutin, 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 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. + *##%*/ + +package fr.ifremer.isisfish.ui.sensitivity; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Properties; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Assert; +import org.junit.Test; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.TopiaNotFoundException; +import org.nuiton.topia.persistence.TopiaDAO; +import org.nuiton.topia.persistence.TopiaEntity; + +import fr.ifremer.isisfish.AbstractIsisFishTest; +import fr.ifremer.isisfish.IsisFishDAOHelper; +import fr.ifremer.isisfish.datastore.IsisH2Config; + +/** + * Test for {@link SensitivityUtils} class. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class SensitivityUtilsTest extends AbstractIsisFishTest { + + /** Logger for this class */ + private static final Log log = LogFactory + .getLog(SensitivityUtilsTest.class); + + /** + * Return a basic valid topia context. + * + * @throws TopiaNotFoundException + */ + protected TopiaContext getTopiaContext() throws TopiaNotFoundException { + Properties config = new Properties(); + IsisH2Config.addMemDatabaseConfig(config, "test"); + IsisH2Config.addHibernateMapping(config); + TopiaContext context = TopiaContextFactory.getContext(config); + return context; + } + + /** + * Test return of getFactorNameForPath(). + */ + @Test + public void testGetFactorNameForPath() { + + String result = SensitivityUtils.getFactorNameForPath("fr.ifremer.isisfish.entities.Strategy#1190373398255#0.7889364141850967#proportionSetOfVessels"); + Assert.assertEquals("Strategy.proportionSetOfVessels", result); + + result = SensitivityUtils.getFactorNameForPath("fr.ifremer.isisfish.entities.Gear#1234#5678#name"); + Assert.assertEquals("Gear.name", result); + + result = SensitivityUtils.getFactorNameForPath("Gear#1234#5678#name"); + Assert.assertEquals("Gear.name", result); + + result = SensitivityUtils.getFactorNameForPath("fr.ifremer.isisfish.entities.Gear#name"); + Assert.assertEquals("Gear.name", result); + + result = SensitivityUtils.getFactorNameForPath("fr.ifremer.isisfish.entities.Gear"); + Assert.assertNull(result); + + result = SensitivityUtils.getFactorNameForPath("fr.ifremer.isisfish.entities.Gear.name"); + Assert.assertNull(result); + } + + /** + * Test (par introspection) que tous les facteurs existent. + * + * @throws NoSuchMethodException + * @throws SecurityException + * @throws TopiaException + * @throws InvocationTargetException + * @throws IllegalAccessException + * @throws IllegalArgumentException + */ + @Test + public void testFactorExistence() throws SecurityException, + NoSuchMethodException, TopiaException, IllegalArgumentException, + IllegalAccessException, InvocationTargetException { + Properties factors = SensitivityUtils.getProperties(); + + TopiaContext testTC = getTopiaContext(); + TopiaContext context = testTC.beginTransaction(); + for (String factorName : factors.stringPropertyNames()) { + String className = factorName.substring(0, factorName.indexOf(".")); + String propertyName = StringUtils.capitalize(factorName.substring(factorName.indexOf(".") + 1)); + + // get proper DAO + if (log.isDebugEnabled()) { + log.debug("Call get" + className + "DAO() on " + IsisFishDAOHelper.class.getSimpleName()); + } + Method mStatic = IsisFishDAOHelper.class.getMethod("get" + className + "DAO", TopiaContext.class); + TopiaDAO<TopiaEntity> dao = (TopiaDAO<TopiaEntity>) mStatic.invoke(null, new Object[] { context }); + Assert.assertNotNull("No DOA found for factor " + factorName, dao); + + // create one instance + TopiaEntity entity = dao.create(); + + // call proper property + if (log.isDebugEnabled()) { + log.debug(" and call get" + propertyName + "() on " + className); + } + Method m = entity.getClass().getMethod("get" + propertyName); + m.invoke(entity, (Object[]) null); + } + context.closeContext(); + } +} Property changes on: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUtilsTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL"