Author: chatellier Date: 2011-04-26 09:22:00 +0000 (Tue, 26 Apr 2011) New Revision: 3285 Log: Gestino des facteurs numeriques en pourcentage. Added: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/OperatorComboModel.java Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_en_GB.properties isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_fr_FR.properties Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputHandler.java 2011-04-26 09:22:00 UTC (rev 3285) @@ -524,7 +524,7 @@ inputContentUI.getSaveVerifier().setInputContentUI(inputContentUI); // mandatory set - //inputContentUI.getSaveVerifier().reset(); // before set bean !!! + inputContentUI.getSaveVerifier().reset(); // before set bean !!! if (topiaEntity != null) { inputContentUI.getSaveVerifier().addCurrentEntity(topiaEntity); } Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputSaveVerifier.java 2011-04-26 09:22:00 UTC (rev 3285) @@ -377,9 +377,12 @@ } } - /*public void reset() { - removeAllEntity(); - }*/ + /** + * Reset state. + */ + public void reset() { + currentEntities.clear(); + } /*public void removeAllEntity() { currentEntities.clear(); Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/ContinuousPanelContainerUI.jaxx 2011-04-26 09:22:00 UTC (rev 3285) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2010 Ifremer, CodeLutin + Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -22,12 +22,20 @@ <http://www.gnu.org/licenses/gpl-2.0.html>. #L% --> -<JPanel id='continuousPanelContainer' layout='{new BorderLayout()}'> +<JPanel layout='{new BorderLayout()}' abstract="true"> <Boolean id='continuePossible' javaBean='true'/> <Boolean id='continueSelected' javaBean='false'/> + <script><![CDATA[ +/** + * Return true only if UI component are all filled and value are correct + * to define new factor. + */ +public abstract boolean isFactorValid(); + ]]></script> + <JPanel id='content' layout='{new BorderLayout()}' constraints='BorderLayout.CENTER'/> - + </JPanel> \ No newline at end of file Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/DefaultContinuousPanelUI.jaxx 2011-04-26 09:22:00 UTC (rev 3285) @@ -5,7 +5,7 @@ $Id$ $HeadURL$ %% - Copyright (C) 2009 - 2010 Ifremer, CodeLutin + Copyright (C) 2009 - 2011 Ifremer, CodeLutin, Chatellier Eric %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -23,68 +23,113 @@ #L% --> <ContinuousPanelContainerUI> + + <Boolean id="percentageTypeFactor" javaBean="true" /> + <import> java.beans.PropertyChangeEvent; java.beans.PropertyChangeListener; javax.swing.JTextField + org.apache.commons.lang.StringUtils </import> + <script><![CDATA[ -protected JTextField continueMax = null; -protected JTextField continueMin = null; - -protected void $afterCompleteSetup() { - 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()); - } - }); +public void init(String min, String max, String referenceValue, String coefficient, String operator) { + continueMin.setText(min); + continueMax.setText(max); + referenceValueField.setText(referenceValue); + coefficientField.setText(coefficient); + operatorField.setSelectedItem(operator); } -public void init(JTextField cMin, JTextField cMax) { - continueMax = cMax; - continueMin = cMin; - continueMax.setEnabled(isContinueSelected()); - continueMin.setEnabled(isContinueSelected()); - continueMax.setVisible(isContinuePossible()); - continueMin.setVisible(isContinuePossible()); - - continueMaxPanel.add(continueMax, BorderLayout.CENTER); - continueMinPanel.add(continueMin, BorderLayout.CENTER); +public void initExisting(String min, String max, String referenceValue, String coefficient, String operator) { + init(min, max, referenceValue, coefficient, operator); + setPercentageTypeFactor(StringUtils.isNotBlank(operator)); } -public String getMin() { - return continueMin.getText(); + at Override +public boolean isFactorValid() { + return true; } - -public String getMax() { - return continueMax.getText(); -} ]]></script> <JPanel id="content"> <Table constraints='BorderLayout.CENTER'> <row> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.firstValue' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> + <cell fill='both' weightx='1' weighty='1'> + <JPanel layout="{new BorderLayout()}"> + <JRadioButton text="isisfish.sensitivity.continuouspercentagetype" + onActionPerformed="setPercentageTypeFactor(true)" + selected="{isPercentageTypeFactor()}" + constraints='BorderLayout.NORTH' + enabled='{isContinueSelected()}'/> + <Table constraints='BorderLayout.CENTER' border='{BorderFactory.createTitledBorder("")}'> + <row> + <cell fill='horizontal'> + <JLabel text='isisfish.sensitivity.referencevalue' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && isPercentageTypeFactor()}'/> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JTextField id='referenceValueField' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && isPercentageTypeFactor()}'/> + </cell> + </row> + <row> + <cell fill='horizontal'> + <JLabel text='isisfish.sensitivity.coefficient' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && isPercentageTypeFactor()}'/> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JTextField id='coefficientField' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && isPercentageTypeFactor()}'/> + </cell> + </row> + <row> + <cell fill='horizontal'> + <JLabel text='isisfish.sensitivity.operator' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && isPercentageTypeFactor()}'/> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JComboBox id='operatorField' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && isPercentageTypeFactor()}' + model="{new OperatorComboModel()}"/> + </cell> + </row> + </Table> + </JPanel> </cell> - <cell fill='horizontal' weightx='0.5'> - <JPanel id='continueMinPanel' layout='{new BorderLayout()}'/> + </row> + <row> + <cell fill='both' weightx='1' weighty='1'> + <JPanel layout="{new BorderLayout()}"> + <JRadioButton text="isisfish.sensitivity.continuousminmaxtype" + onActionPerformed="setPercentageTypeFactor(false)" + selected="{!isPercentageTypeFactor()}" + constraints='BorderLayout.NORTH' + enabled='{isContinueSelected()}'/> + <Table constraints='BorderLayout.CENTER' border='{BorderFactory.createTitledBorder("")}'> + <row> + <cell fill='horizontal'> + <JLabel text='isisfish.sensitivity.firstValue' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && !isPercentageTypeFactor()}'/> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JTextField id='continueMin' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && !isPercentageTypeFactor()}'/> + </cell> + </row> + <row> + <cell fill='horizontal'> + <JLabel text='isisfish.sensitivity.lastValue' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && !isPercentageTypeFactor()}'/> + </cell> + <cell fill='horizontal' weightx='0.5'> + <JTextField id='continueMax' visible='{isContinuePossible()}' + enabled='{isContinueSelected() && !isPercentageTypeFactor()}'/> + </cell> + </row> + </Table> + </JPanel> </cell> - <cell fill='horizontal'> - <JLabel text='isisfish.sensitivity.lastValue' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> - </cell> - <cell fill='horizontal' weightx='0.5'> - <JPanel id='continueMaxPanel' layout='{new BorderLayout()}'/> - </cell> </row> </Table> </JPanel> Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2011-04-26 09:22:00 UTC (rev 3285) @@ -25,21 +25,22 @@ <ContinuousPanelContainerUI> <import> - javax.swing.table.AbstractTableModel; - javax.swing.table.DefaultTableModel; - fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; - javax.swing.table.TableCellEditor; - javax.swing.table.TableModel; - java.util.regex.Matcher; - java.util.regex.Pattern; - org.apache.commons.lang.StringUtils; + java.awt.Component + java.awt.Dimension + java.util.ArrayList + java.util.EventObject + java.util.List + java.util.regex.Matcher + java.util.regex.Pattern + javax.swing.table.AbstractTableModel + javax.swing.table.DefaultTableModel + javax.swing.table.TableCellEditor + javax.swing.table.TableModel javax.swing.JComboBox javax.swing.DefaultCellEditor - java.util.EventObject - java.awt.Component - java.util.ArrayList javax.swing.event.CellEditorListener - java.awt.Dimension + fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain + org.apache.commons.lang.StringUtils </import> <String id='text' javaBean='null'/> @@ -53,39 +54,37 @@ <fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/> <script><![CDATA[ - - protected String[] columnNames = { _("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>(); +protected List<EquationContinuousDomain> domains = new ArrayList<EquationContinuousDomain>(); +protected List<JComboBox> operateurs = new ArrayList<JComboBox>(); +protected List<JButton> actions = new ArrayList<JButton>(); -public java.util.List<EquationContinuousDomain> getDomains(){ - return datas; +public List<EquationContinuousDomain> getDomains() { + return domains; } -public void setDomains(java.util.List<EquationContinuousDomain> domains){ - datas.clear(); - for (EquationContinuousDomain d : domains){ +public void setDomains(List<EquationContinuousDomain> newDomains) { + domains.clear(); + for (EquationContinuousDomain d : newDomains) { addDomain(d); } } -public void addDomain(EquationContinuousDomain domain){ +public void addDomain(EquationContinuousDomain domain) { newButton(); - datas.add(domain); + domains.add(domain); } protected AbstractTableModel getTableModel() { AbstractTableModel model = new AbstractTableModel() { @Override public int getRowCount() { - return datas.size(); + return domains.size(); } @Override @@ -101,14 +100,14 @@ @Override public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) { - return datas.get(rowIndex).getVariableName(); + return domains.get(rowIndex).getVariableName(); } else if (columnIndex == 1) { - return datas.get(rowIndex).getReferenceValue(); + return domains.get(rowIndex).getReferenceValue(); } else if (columnIndex == 2) { - Double result = datas.get(rowIndex).getCoefficient() * 100; + Double result = domains.get(rowIndex).getCoefficient() * 100; return result; } else if (columnIndex == 3) { - return datas.get(rowIndex).getOperator(); + return domains.get(rowIndex).getOperator(); } else if (columnIndex == 4) { return _("isisfish.sensitivity.validDiscretNumber"); } @@ -120,13 +119,13 @@ if (String.class.isInstance(aValue)) { if (!((String)aValue).equals("")) { if (columnIndex == 0){ - datas.get(rowIndex).setVariableName((String)aValue); + domains.get(rowIndex).setVariableName((String)aValue); } else if (columnIndex == 1) { - datas.get(rowIndex).setReferenceValue(Double.parseDouble((String)aValue)); + domains.get(rowIndex).setReferenceValue(Double.parseDouble((String)aValue)); } else if (columnIndex == 2) { - datas.get(rowIndex).setCoefficient(Double.parseDouble((String)aValue) / 100); + domains.get(rowIndex).setCoefficient(Double.parseDouble((String)aValue) / 100); } else if (columnIndex == 3) { - datas.get(rowIndex).setOperator((String)aValue); + domains.get(rowIndex).setOperator((String)aValue); } } } @@ -140,31 +139,28 @@ }; return model; } -protected JComboBox getOperateur(){ - JComboBox result = new JComboBox(); - result.addItem("+"); - result.addItem("-"); - result.addItem("*"); - result.addItem("/"); + +protected JComboBox getOperateur() { + JComboBox result = new JComboBox(new OperatorComboModel()); operateurs.add(result); result.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JComboBox source = (JComboBox)e.getSource(); int i = operateurs.indexOf(source); - if (datas.size() <= i){ - datas.get(i).setOperator((String)source.getSelectedItem()); + if (domains.size() < i) { + domains.get(i).setOperator((String)source.getSelectedItem()); } } }); return result; } -protected void newButton(){ + +protected void newButton() { JButton result = new JButton(); result.setText(_("isisfish.sensitivity.validDiscretNumber")); actions.add(result); result.addActionListener(new ActionListener() { - @Override public void actionPerformed(ActionEvent e) { JButton source = (JButton)e.getSource(); @@ -173,11 +169,13 @@ } }); } -protected JButton getActionButton(int i){ + +protected JButton getActionButton(int i) { return actions.get(i); } + protected void valid(int i) { - String variableName = datas.get(i).getVariableName(); + String variableName = domains.get(i).getVariableName(); String[] lines = editor.getEditor().getText().split("\n"); String result = ""; for (String line : lines) { @@ -191,10 +189,9 @@ } editor.getEditor().setText(result); } -protected void setTable(){ + +protected void setTable() { params.setModel(getTableModel()); - // poussin 20090512, marche pas, impossible d'affiche la combo dans l'interface: - // chatellier , si mais seulement en edition params.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(getOperateur())); params.getColumnModel().getColumn(4).setCellEditor(new TableCellEditor() { @@ -236,22 +233,40 @@ } }); } -protected void add() { +protected void addNewVariable() { EquationContinuousDomain domain = new EquationContinuousDomain(); // fixe NPE in table model renderer domain.setCoefficient(1.0); - datas.add(domain); + domains.add(domain); newButton(); setTable(); } -protected void remove() { - int i = params.getSelectedRow(); - if (i != -1){ - datas.remove(i); - operateurs.remove(i); - actions.remove(i); - setTable(); + +protected void removeVariable() { + int selectedRow = params.getSelectedRow(); + domains.remove(selectedRow); + operateurs.remove(selectedRow); + actions.remove(selectedRow); + setTable(); +} + + at Override +public boolean isFactorValid() { + boolean valid = true; + + for (EquationContinuousDomain domain : domains) { + if (domain.getReferenceValue() == null + || domain.getCoefficient() == null + || domain.getCoefficient() > 100 + || domain.getCoefficient() <= 0 + || domain.getOperator() == null + || domain.getVariableName() == null) { + } else { + valid = false; + } } + + return valid; } ]]></script> <JPanel id='content'> @@ -261,15 +276,19 @@ <JScrollPane preferredSize="{new Dimension(200, 150)}"> <JTable id='params' visible='{isContinuePossible()}' model='{getTableModel()}' enabled='{isContinueSelected()}' /> + <ListSelectionModel initializer="params.getSelectionModel()" + onValueChanged="remove.setEnabled(params.getSelectedRow() != -1)" /> </JScrollPane> </cell> </row> <row> <cell fill='horizontal' weightx='1'> - <JButton id='add' text='isisfish.common.add' visible='{isContinuePossible()}' enabled='{isContinueSelected()}' onActionPerformed='add()'/> + <JButton id='add' text='isisfish.common.add' visible='{isContinuePossible()}' + enabled='{isContinueSelected()}' onActionPerformed='addNewVariable()'/> </cell> <cell fill='horizontal' weightx='1'> - <JButton id='remove' text='isisfish.common.remove' visible='{isContinuePossible()}' enabled='{isContinueSelected()}' onActionPerformed='remove()'/> + <JButton id='remove' text='isisfish.common.remove' visible='{isContinuePossible()}' + enabled='false' onActionPerformed='removeVariable()'/> </cell> </row> <row> Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/FactorWizardUI.jaxx 2011-04-26 09:22:00 UTC (rev 3285) @@ -56,11 +56,6 @@ protected java.util.List<JComponent> discretComponents = new ArrayList<JComponent>(); protected ContinuousPanelContainerUI continuousPanel = null; -/*protected JComponent cOrigine = null; -protected TopiaEntityContextable bean = null; -protected String path = null; -protected Factor factor = null;*/ - protected void $afterCompleteSetup() { addPropertyChangeListener(PROPERTY_CONTINUE_POSSIBLE, new PropertyChangeListener() { @Override @@ -101,7 +96,7 @@ onActionPerformed='setContinueSelected(continueRadio.isSelected())' constraints="BorderLayout.NORTH"/> <JPanel id='continuousPanelContainer' layout='{new BorderLayout()}' - constraints="BorderLayout.CENTER"/> + constraints="BorderLayout.CENTER" border='{BorderFactory.createTitledBorder("")}' /> </JPanel> </cell> </row> @@ -112,7 +107,7 @@ selected='{true}' buttonGroup='factorType' onActionPerformed='setContinueSelected(continueRadio.isSelected())' constraints="BorderLayout.NORTH"/> - <Table id='discretePanelContainer' constraints="BorderLayout.CENTER"> + <Table id='discretePanelContainer' constraints="BorderLayout.CENTER" border='{BorderFactory.createTitledBorder("")}'> <row> <cell fill='horizontal'> <JLabel text='isisfish.sensitivity.selectDiscretNumber' enabled='{!isContinueSelected()}'/> Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/MatrixContinuousPanelUI.jaxx 2011-04-26 09:22:00 UTC (rev 3285) @@ -26,6 +26,12 @@ <org.nuiton.math.matrix.MatrixND id='matrix' javaBean='null'/> + <script><![CDATA[ + at Override +public boolean isFactorValid() { + return true; +} + ]]></script> <JPanel id='content'> <Table constraints='BorderLayout.CENTER'> <row> @@ -51,12 +57,8 @@ <JLabel text='isisfish.sensitivity.operator' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> <cell fill='horizontal' weightx='1' columns='3'> - <JAXXComboBox id='operator' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'> - <item id='plus' value="+"/> - <item id='moins' value="-"/> - <item id='mult' value="*"/> - <item id='div' value="/"/> - </JAXXComboBox> + <JComboBox id='operator' visible='{isContinuePossible()}' enabled='{isContinueSelected()}' + model="{new OperatorComboModel()}"/> </cell> </row> </Table> Added: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/OperatorComboModel.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/OperatorComboModel.java (rev 0) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/OperatorComboModel.java 2011-04-26 09:22:00 UTC (rev 3285) @@ -0,0 +1,65 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.ui.sensitivity; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.DefaultComboBoxModel; + +/** + * Modèle de combo box pour les operateurs des facteurs. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class OperatorComboModel extends DefaultComboBoxModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = -1880800720890228942L; + + protected static final List<String> OPERATORS = new ArrayList<String>(); + + static { + OPERATORS.add("+"); + OPERATORS.add("-"); + OPERATORS.add("*"); + OPERATORS.add("/"); + } + + @Override + public int getSize() { + return OPERATORS.size(); + } + + @Override + public Object getElementAt(int index) { + return OPERATORS.get(index); + } +} Property changes on: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/OperatorComboModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2011-04-26 09:22:00 UTC (rev 3285) @@ -159,7 +159,7 @@ InputContentUI inputContentUI = getUIInstanceForBeanClass(internalClass, sensitivityTabUI); // mandatory set - //inputContentUI.getSaveVerifier().reset(); // before set bean !!! + inputContentUI.getSaveVerifier().reset(); // before set bean !!! if (topiaEntity != null) { inputContentUI.getSaveVerifier().addCurrentEntity(topiaEntity); inputContentUI.getSaveVerifier().setInputContentUI(inputContentUI); @@ -284,7 +284,7 @@ SensitivityInputHandler handler = factorWizardUI.getHandler(); handler.initExistingFactor(factorWizardUI, selectedFactor); factorWizardUI.pack(); - factorWizardUI.setLocationRelativeTo(sensitivityTabUI.getFactorsTree()); + factorWizardUI.setLocationRelativeTo(sensitivityTabUI); factorWizardUI.setVisible(true); } } @@ -325,8 +325,6 @@ * @param property bean property to edit */ public void initNewFactor(FactorWizardUI factorWizardUI, TopiaEntityContextable bean, String property) { - //factorWizardUI.setBean(bean); - //this.cOrigine = source; // path is topiaId#property // ex : fwn#fsd#0.3425345#name @@ -345,28 +343,17 @@ Object valueForPath = getPropertyValue(bean, beanProperty); boolean continuePossible = canBeContinue(valueForPath); boolean continueSelected = isContinue(valueForPath); - factorWizardUI.setContinuePossible(continuePossible); - factorWizardUI.setContinueSelected(continueSelected); - factorWizardUI.getContinueRadio().setSelected(continueSelected); // init panel if (continuePossible) { factorWizardUI.continuousPanel = getContinuousPanel(valueForPath, bean, property); factorWizardUI.getContinuousPanelContainer().add(factorWizardUI.continuousPanel, BorderLayout.CENTER); } - /*if (!continueSelected && valueForPath instanceof RangeOfValues) { - int i = 0; - 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) { - continuousPanel.setContinueSelected(selected); - }*/ - //setContinueSelected(EditorHelper.isContinue(cOrigine)); + + // after, for binding on continuePossible, continueSelected to work + factorWizardUI.setContinuePossible(continuePossible); + factorWizardUI.setContinueSelected(continueSelected); + factorWizardUI.getContinueRadio().setSelected(continueSelected); } /** @@ -416,10 +403,8 @@ SortedMap<Object, Object> values = dDomain.getValues(); int i = 0; - Object cache = null; for (Object o : values.values()) { i++; - cache = o; JComponent c = null; if (o != null) { c = getEditorWithValue(factorWizardUI, dDomain, o); @@ -628,7 +613,7 @@ max = values.substring(first + 1); } } - ui.init(new JTextField(min), new JTextField(max)); + ui.init(min, max, min, null, null); result = ui; } else if (value instanceof Equation) { @@ -650,7 +635,7 @@ result = matrixPanel; } else { DefaultContinuousPanelUI ui = new DefaultContinuousPanelUI(); - ui.init(new JTextField(String.valueOf(value)), new JTextField(String.valueOf(value))); + ui.init(String.valueOf(value), String.valueOf(value), String.valueOf(value), null, null); result = ui; } @@ -672,7 +657,6 @@ public ContinuousPanelContainerUI getContinuousPanelWithValue(Factor factor, ContinuousDomain domain, TopiaContext topiaContext) { ContinuousPanelContainerUI result = null; - DefaultContinuousPanelUI continuousPanel = null; if (domain instanceof EquationContinuousDomain) { String factorPath = factor.getPath(); if (factor.getPath().indexOf('#') != -1) { @@ -718,9 +702,28 @@ panel.getCoef().setText(String.valueOf(matrixDomain.getCoefficient() * 100)); result = panel; } else { - continuousPanel = new DefaultContinuousPanelUI(); - continuousPanel.init(new JTextField(String.valueOf(domain.getMinBound())), - new JTextField(String.valueOf(domain.getMaxBound()))); + DefaultContinuousPanelUI continuousPanel = new DefaultContinuousPanelUI(); + + // factor numerique continue (percentage) + if (domain.getOperator() != null) { + // il y a bien 3 fois domain.getReferenceValue() pas d'erreur + continuousPanel.initExisting( + String.valueOf(domain.getReferenceValue()), + String.valueOf(domain.getReferenceValue()), + String.valueOf(domain.getReferenceValue()), + String.valueOf(domain.getCoefficient()), + String.valueOf(domain.getOperator())); + } + else { + // factor numerique continue (min/max) + // pas d'erreur sur 2 fois domain.getMinBound() + continuousPanel.initExisting( + String.valueOf(domain.getMinBound()), + String.valueOf(domain.getMaxBound()), + String.valueOf(domain.getMinBound()), + "", + null); + } result = continuousPanel; } @@ -834,6 +837,20 @@ * @param factorWizardUI factorWizardUI */ public void save(FactorWizardUI factorWizardUI) { + + // first check is faactor is valid + boolean factorValid = false; + ContinuousPanelContainerUI continuousPanel = factorWizardUI.continuousPanel; + if (continuousPanel != null) { + factorValid = continuousPanel.isFactorValid(); + } + if (!factorValid) { + JOptionPane.showMessageDialog(factorWizardUI, _("isisfish.sensitivity.factor.notvalid"), + _("isisfish.sensitivity.title"), JOptionPane.ERROR_MESSAGE); + return; + } + + // call specific method depending on continuous/discrete if (factorWizardUI.getContinueRadio().isSelected()) { saveContinue(factorWizardUI.getFactorNameField().getText(), factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), factorWizardUI.continuousPanel, @@ -843,29 +860,31 @@ factorWizardUI.getComment().getText(), factorWizardUI.getFactorPath(), factorWizardUI.discretComponents, factorWizardUI.getSimulAction(), factorWizardUI.isExistingValue()); } + + // refresh factor list factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); + + // close window factorWizardUI.dispose(); } - + /** - * Remove current factor. + * Save a continous factor. * - * @param factorWizardUI factorWizardUI + * @param name + * @param comment + * @param path + * @param panel + * @param action + * @param exist */ - public void remove(FactorWizardUI factorWizardUI) { - factorWizardUI.getSimulAction().removeFactor(factorWizardUI.getFactorPath()); - factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); - factorWizardUI.dispose(); - } - protected void saveContinue(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(); + //MatrixND matrix = matrixPanel.getMatrix(); // always null MatrixND matrix = matrixPanel.getComponentPanel().getMatrix(); String operateur = (String)matrixPanel.getOperator().getSelectedItem(); action.addContinuousMatrixFactor(name, comment, path, coef, matrix, @@ -876,6 +895,8 @@ EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; TopiaEntityContextable bean = (TopiaEntityContextable)equationPanel.getBean(); + TopiaContext topiaContext = bean.getTopiaContext(); + String property = equationPanel.getBeanProperty(); property = StringUtils.capitalize(property) + "Content"; Method m = bean.getClass().getMethod("set" + property, String.class); @@ -883,60 +904,41 @@ // 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, 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()); - } - } + topiaContext.commitTransaction(); } 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), - exist); + DefaultContinuousPanelUI defaultPanel = (DefaultContinuousPanelUI) panel; + + if (defaultPanel.isPercentageTypeFactor()) { + Double referenceValue = Double.valueOf(defaultPanel.getReferenceValueField().getText()); + Double coefficient = Double.valueOf(defaultPanel.getCoefficientField().getText()); + String operator = (String)defaultPanel.getOperatorField().getSelectedItem(); + action.addContinuousFactor(name, comment, path, + referenceValue, coefficient, operator, exist); + } + else { + double minBound = Double.parseDouble(defaultPanel.getContinueMin().getText()); + double maxBound = Double.parseDouble(defaultPanel.getContinueMax().getText()); + action.addContinuousFactor(name, comment, path, + minBound, maxBound, exist); + } } } - protected Double getMin(DefaultContinuousPanelUI defaultPanel) { - return Double.parseDouble(defaultPanel.getMin()); - } - - protected Double getMax(DefaultContinuousPanelUI defaultPanel) { - return Double.parseDouble(defaultPanel.getMax()); - } - + /** + * Save a discret factor. + * + * @param name + * @param comment + * @param path + * @param components + * @param action + * @param exist + */ protected void saveDiscret(String name, String comment, String path, List<JComponent> components, SimulAction action, boolean exist) { @@ -970,4 +972,15 @@ return result; } + + /** + * Remove current factor. + * + * @param factorWizardUI factorWizardUI + */ + public void remove(FactorWizardUI factorWizardUI) { + factorWizardUI.getSimulAction().removeFactor(factorWizardUI.getFactorPath()); + factorWizardUI.getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); + factorWizardUI.dispose(); + } } Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2011-04-26 09:22:00 UTC (rev 3285) @@ -34,7 +34,6 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.io.Serializable; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -891,6 +890,16 @@ factorGroup.addFactor(f); } + /** + * Ajout d'un facteur continue de type (min/max). + * + * @param name + * @param comment + * @param path + * @param min + * @param max + * @param exist + */ public void addContinuousFactor(String name, String comment, String path, Double min, Double max, boolean exist) { Factor f = new Factor(name); @@ -906,6 +915,33 @@ addFactor(f); } + /** + * Ajout d'un facteur continue de type pourcentage. + * + * @param name + * @param comment + * @param path + * @param referenceValue + * @param coefficient + * @param operator + * @param exist + */ + public void addContinuousFactor(String name, String comment, String path, Double referenceValue, + Double coefficient, String operator, boolean exist) { + Factor f = new Factor(name); + ContinuousDomain domain = new ContinuousDomain(); + domain.setReferenceValue(referenceValue); + domain.setCoefficient(coefficient); + domain.setOperator(operator); + f.setDomain(domain); + f.setComment(comment); + f.setPath(path); + if (exist) { + removeFactor(path); + } + addFactor(f); + } + public void addDiscreteFactor(String name, String comment, String path, List<Object> values, boolean exist) { Factor f = new Factor(name); Modified: isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_en_GB.properties 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_en_GB.properties 2011-04-26 09:22:00 UTC (rev 3285) @@ -905,6 +905,8 @@ isisfish.sensitivity.coefficient=Coefficient (in %) isisfish.sensitivity.comment=Comment isisfish.sensitivity.continue=Continuous factor +isisfish.sensitivity.continuousminmaxtype=Mix/Max type +isisfish.sensitivity.continuouspercentagetype=Percentage type isisfish.sensitivity.discret=Discret factor isisfish.sensitivity.displaysecondpass=Display results isisfish.sensitivity.equation.variable.action=Action @@ -914,6 +916,7 @@ isisfish.sensitivity.equation.variable.value=Value isisfish.sensitivity.export=Export isisfish.sensitivity.factor=Factor +isisfish.sensitivity.factor.notvalid=Factor not valid ! isisfish.sensitivity.factors=Factors isisfish.sensitivity.firstValue=First value isisfish.sensitivity.increment=Cardinality @@ -924,6 +927,7 @@ isisfish.sensitivity.newfactorgroup.tip=Add new factor group isisfish.sensitivity.newfactorname=Factor group name isisfish.sensitivity.operator=Operator +isisfish.sensitivity.referencevalue=Reference value isisfish.sensitivity.secondpass=Analyze results isisfish.sensitivity.secondpass.title=Analyze results isisfish.sensitivity.select=Method Modified: isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2011-04-26 09:19:13 UTC (rev 3284) +++ isis-fish/branches/3.3.1/src/main/resources/i18n/isis-fish_fr_FR.properties 2011-04-26 09:22:00 UTC (rev 3285) @@ -905,6 +905,8 @@ isisfish.sensitivity.coefficient=Coefficient (en %) isisfish.sensitivity.comment=Commentaires isisfish.sensitivity.continue=Facteur continu +isisfish.sensitivity.continuousminmaxtype=Type min/max +isisfish.sensitivity.continuouspercentagetype=Type pourcentage isisfish.sensitivity.discret=Facteur discret isisfish.sensitivity.displaysecondpass=Afficher les r\u00E9sultats isisfish.sensitivity.equation.variable.action=Action @@ -914,6 +916,7 @@ isisfish.sensitivity.equation.variable.value=Valeur isisfish.sensitivity.export=Export isisfish.sensitivity.factor=Facteur +isisfish.sensitivity.factor.notvalid=Facteur non valide ! isisfish.sensitivity.factors=Facteurs isisfish.sensitivity.firstValue=Premi\u00E8re valeur isisfish.sensitivity.increment=Cardinalit\u00E9 @@ -924,6 +927,7 @@ isisfish.sensitivity.newfactorgroup.tip=Ajouter un groupe de facteur isisfish.sensitivity.newfactorname=Nom du groupe de facteurs isisfish.sensitivity.operator=Op\u00E9rateur +isisfish.sensitivity.referencevalue=Valeur de r\u00E9f\u00E9rence isisfish.sensitivity.secondpass=Analyse des r\u00E9sultats isisfish.sensitivity.secondpass.title=Analyse des r\u00E9sultats isisfish.sensitivity.select=M\u00E9thode
participants (1)
-
chatellier@users.labs.libre-entreprise.org