r3333 - in isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui: models/rule simulator
Author: chatellier Date: 2011-05-19 15:30:08 +0000 (Thu, 19 May 2011) New Revision: 3333 Log: Suppression des facteurs lorsqu'une regle est supprim?\195?\169e. Pas bien fait mais bon... Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersTableModel.java isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java 2011-05-18 15:54:41 UTC (rev 3332) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleListModel.java 2011-05-19 15:30:08 UTC (rev 3333) @@ -60,7 +60,6 @@ * @param rules rules */ public RuleListModel(List<Rule> rules) { - super(); this.rules = rules; } @@ -80,6 +79,7 @@ */ public void setRules(List<Rule> rules) { this.rules = rules; + fireContentsChanged(this, 0, rules.size() - 1); } /* Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java 2011-05-18 15:54:41 UTC (rev 3332) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellEditor.java 2011-05-19 15:30:08 UTC (rev 3333) @@ -28,10 +28,12 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.EventObject; import javax.swing.AbstractCellEditor; import javax.swing.Icon; import javax.swing.JButton; +import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.TableCellEditor; @@ -83,17 +85,15 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - Icon icon = Resource.getIcon("/icons/building_add.png"); - JButton button = new JButton(icon); + Component comp = null; - boolean enabled = false; final String paramName = (String)value; try { Object paramValue = RuleStorage.getParameterValue(rule, paramName); //SensitivityInputHandler handler = ruleChooser.getContextValue(SensitivityInputHandler.class); // FIXME chatellier : number n'est pas correct ici mais j'ai pas d'idée :( if (/*handler.canBeContinue(paramValue) || */paramValue instanceof Number) { - enabled = true; + JButton button = new JButton(Resource.getIcon("/icons/building_add.png")); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -102,6 +102,7 @@ simulAction.addRuleParameterFactor(ruleChooser, rule, paramName); } }); + comp = button; } } catch (IsisFishException ex) { if (log.isWarnEnabled()) { @@ -109,12 +110,13 @@ } } - button.setEnabled(enabled); + if (comp == null) { + comp = new JLabel(); + } - return button; + return comp; } - /* * @see javax.swing.CellEditor#getCellEditorValue() */ Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java 2011-05-18 15:54:41 UTC (rev 3332) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersFactorTableCellRenderer.java 2011-05-19 15:30:08 UTC (rev 3333) @@ -27,8 +27,8 @@ import java.awt.Component; -import javax.swing.Icon; import javax.swing.JButton; +import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; @@ -74,17 +74,15 @@ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - Icon icon = Resource.getIcon("/icons/building_add.png"); - JButton button = new JButton(icon); + Component comp = null; - boolean enabled = false; String paramName = (String)value; try { Object paramValue = RuleStorage.getParameterValue(rule, paramName); //SensitivityInputHandler handler = ruleChooser.getContextValue(SensitivityInputHandler.class); // FIXME chatellier : number n'est pas correct ici mais j'ai pas d'idée :( if (/*handler.canBeContinue(paramValue) || */paramValue instanceof Number) { - enabled = true; + comp = new JButton(Resource.getIcon("/icons/building_add.png")); } } catch (IsisFishException ex) { if (log.isWarnEnabled()) { @@ -92,8 +90,11 @@ } } - button.setEnabled(enabled); - return button; + if (comp == null) { + comp = super.getTableCellRendererComponent(table, "", isSelected, hasFocus, row, column); + } + + return comp; } } Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersTableModel.java =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersTableModel.java 2011-05-18 15:54:41 UTC (rev 3332) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/models/rule/RuleParametersTableModel.java 2011-05-19 15:30:08 UTC (rev 3333) @@ -217,6 +217,10 @@ } } break; + case 2: + // appelé parce qu'on ne peut pas l'empecher + // pour la colonne Action, + break; default: throw new IndexOutOfBoundsException("Can't edit column " + columnIndex); Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2011-05-18 15:54:41 UTC (rev 3332) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/RuleChooser.jaxx 2011-05-19 15:30:08 UTC (rev 3333) @@ -36,7 +36,9 @@ <import> java.beans.PropertyChangeEvent java.beans.PropertyChangeListener + java.util.List fr.ifremer.isisfish.IsisFishException + fr.ifremer.isisfish.IsisFishRuntimeException fr.ifremer.isisfish.datastore.RuleStorage fr.ifremer.isisfish.rule.Rule fr.ifremer.isisfish.ui.models.rule.RuleListModel @@ -46,6 +48,7 @@ fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellRenderer fr.ifremer.isisfish.ui.models.rule.RuleParametersFactorTableCellEditor fr.ifremer.isisfish.ui.util.ErrorHelper + fr.ifremer.isisfish.ui.SimulationUI fr.ifremer.isisfish.datastore.RegionStorage </import> @@ -55,11 +58,11 @@ addPropertyChangeListener(PROPERTY_RULES_LIST, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getNewValue() == null) { - selectedRulesList.setModel(new fr.ifremer.isisfish.ui.models.rule.RuleListModel()); + selectedRulesList.setModel(new RuleListModel()); } else /*if (evt.getNewValue() != null)*/ { - java.util.List<fr.ifremer.isisfish.rule.Rule> rules = (java.util.List<fr.ifremer.isisfish.rule.Rule>)evt.getNewValue(); - selectedRulesList.setModel(new fr.ifremer.isisfish.ui.models.rule.RuleListModel(rules)); + List<Rule> rules = (List<Rule>)evt.getNewValue(); + selectedRulesList.setModel(new RuleListModel(rules)); } } }); @@ -67,8 +70,6 @@ // fix colums size for buttons if (isShowFactorColumn()) { SwingUtil.fixTableColumnWidth(selectedRuleParameterTable, 2, 30); - - } } @@ -83,37 +84,50 @@ RuleStorage ruleStorage = RuleStorage.getRule(availableRuleName); Rule ruleTmp = ruleStorage.getNewRuleInstance(); rulesList.add(ruleTmp); - } catch (IsisFishException e) { - if (log.isErrorEnabled()) { - log.error("Can't add rule", e); - } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.addrule"), e); + } catch (IsisFishException ex) { + throw new IsisFishRuntimeException("Can't add rule", ex); } } - - //TODO replace this by a better fire() event - selectedRulesList.setModel(new RuleListModel(rulesList)); + selectedRulesListModel.setRules(rulesList); } /** * Remove selected rules for selected rules list. */ protected void removeSelectedRules() { + SimulAction simulAction = getContextValue(SimulAction.class); Object[] selectedRuleValues = selectedRulesList.getSelectedValues(); for (Object selectedRuleValue : selectedRuleValues) { + + // condition pour savoir si on est dans l'instance principal + // de définition d'une simulation (hack) + if (isShowFactorColumn()) { + int ruleIndex = rulesList.indexOf(selectedRuleValue); + simulAction.preRemoveRule(ruleIndex); + getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); + } + + // real rule remove rulesList.remove(selectedRuleValue); } - //TODO replace this by a better fire() event - selectedRulesList.setModel(new RuleListModel(rulesList)); + selectedRulesListModel.setRules(rulesList); } /** * Clear selected rule list. */ protected void clearAllRules() { - rulesList.clear(); - //TODO replace this by a better fire() event - selectedRulesList.setModel(new RuleListModel(rulesList)); + // condition pour savoir si on est dans l'instance principal + // de définition d'une simulation (hack) + if (isShowFactorColumn()) { + SimulAction simulAction = getContextValue(SimulAction.class); + for (Rule rule : rulesList) { + int ruleIndex = rulesList.indexOf(rule); + simulAction.preRemoveRule(ruleIndex); + } + getContextValue(SimulationUI.class, "SimulationUI").refreshFactorTree(); + } + selectedRulesListModel.setRules(rulesList); } /** @@ -171,8 +185,9 @@ </cell> <cell fill="both" rows="3" weightx="1" weighty="1"> <JScrollPane> + <fr.ifremer.isisfish.ui.models.rule.RuleListModel id="selectedRulesListModel" /> <JList id="selectedRulesList" selectionMode="{javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}" - model='{new fr.ifremer.isisfish.ui.models.rule.RuleListModel(rulesList)}' + model='{selectedRulesListModel}' cellRenderer='{new fr.ifremer.isisfish.ui.models.rule.RuleListCellRenderer()}' onValueChanged='removeRuleButton.setEnabled(selectedRulesList.getSelectedIndex() != -1);clearRulesButton.setEnabled(selectedRulesList.getSelectedIndex() != -1);displayRuleParameters()' enabled="{isActive()}"/> @@ -181,12 +196,14 @@ </row> <row> <cell fill='horizontal'> - <JButton id="removeRuleButton" text="isisfish.common.remove" enabled="false" onActionPerformed='removeSelectedRules()'/> + <JButton id="removeRuleButton" text="isisfish.common.remove" + enabled="false" onActionPerformed='removeSelectedRules()'/> </cell> </row> <row> <cell fill='horizontal' anchor="north"> - <JButton id="clearRulesButton" text="isisfish.common.clear" enabled="false" onActionPerformed='clearAllRules()'/> + <JButton id="clearRulesButton" text="isisfish.common.clear" + enabled="false" onActionPerformed='clearAllRules()'/> </cell> </row> <row weightx="2" weighty="2" columns="3"> 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-05-18 15:54:41 UTC (rev 3332) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/simulator/SimulAction.java 2011-05-19 15:30:08 UTC (rev 3333) @@ -33,7 +33,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.IOException; import java.lang.reflect.Field; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -43,6 +42,8 @@ import java.util.Properties; import java.util.SortedMap; import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.AbstractAction; import javax.swing.JButton; @@ -51,6 +52,7 @@ import jaxx.runtime.SwingUtil; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -188,14 +190,7 @@ } ErrorHelper.showErrorDialog(_("isisfish.error.simulation.importparameter"), e); } finally { - try { - fos.close(); - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't import simulation", e); - } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.importparameter"), e); - } + IOUtils.closeQuietly(fos); } } @@ -217,16 +212,7 @@ } ErrorHelper.showErrorDialog(_("isisfish.error.simulation.savesimulation"), e); } finally { - try { - if (fos != null) { - fos.close(); - } - } catch (IOException e) { - if (log.isErrorEnabled()) { - log.error("Can't save simulation", e); - } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.savesimulation"), e); - } + IOUtils.closeQuietly(fos); } } @@ -325,70 +311,68 @@ } } - /* - ************ - * ParamsUI - ************ - */ - /** - * Get simulation parameters rule list. + * Called by RuleChooser component before rule deletion. + * Used to remove factor associated to rule to delete. * - * @return rules - */ - public List<Rule> getRules() { - return param.getRules(); - } - - /** - * Add new rule. + * Factor path reference rule with factor path containing rule index + * in rule list : + * for example : + * <pre> + * parameters.rule.2.tacPoids + * </pre> * - * Get a new instance of ruleItem, and add it to rule list. + * Must also rename all next indices. * - * @param ruleName rule to get copy + * @param ruleIndex rule index to to delete */ - public void addNewRule(String ruleName) { - try { - RuleStorage ruleStorage = RuleStorage.getRule(ruleName); - Rule ruleTmp = ruleStorage.getNewRuleInstance(); - param.addRule(ruleTmp); - } catch (IsisFishException e) { - if (log.isErrorEnabled()) { - log.error("Can't add rule", e); - } - ErrorHelper.showErrorDialog(_("isisfish.error.simulation.addrule"), e); - } + public void preRemoveRule(int ruleIndex) { + preRemoveRule(factorGroup, ruleIndex); } /** - * Retire une regle. + * Recursive rename and delete rule factor path. * - * @param rule rule to removes - * @return <tt>true</tt> if this list contained the specified element + * @param ruleIndex rule index to to delete */ - public boolean removeRule(Rule rule) { - return param.removeRule(rule); + protected void preRemoveRule(FactorGroup factorGroup, int ruleIndex) { + Collection<Factor> factorCopy = new ArrayList<Factor>(factorGroup.getFactors()); + for (Factor factor : factorCopy) { + if (factor instanceof FactorGroup) { + preRemoveRule((FactorGroup)factor, ruleIndex); + } + else { + Pattern factorPathPattern = Pattern.compile("^(parameters\\.rule\\.)(\\d+)(.*)$"); + Matcher factorPathMatcher = factorPathPattern.matcher(factor.getPath()); + if (factorPathMatcher.find()) { + Integer index = Integer.parseInt(factorPathMatcher.group(2)); + if (index == ruleIndex) { + // meme index, suppression + if (log.isDebugEnabled()) { + log.debug("Removing factor for index " + ruleIndex + " : " + factor.getPath()); + } + factorGroup.remove(factor); + } + else if (index > ruleIndex) { + // index supérieur, renommage + // avec un index de moins + String factorPath = factorPathMatcher.group(1) + + String.valueOf(index - 1) + factorPathMatcher.group(3); + if (log.isDebugEnabled()) { + log.debug("Renammed factor for index " + ruleIndex + " : " + factor.getPath()); + } + factor.setPath(factorPath); + factor.setName(factorPath); // also factor name + } + } + } + } } - /** - * Retourne une liste d'instance de toutes les regles disponible. + * Get strategies list to fill Jlist in ParamUI. * - * Instancié (utile pour les modeles). - * - * @return instance rule list + * @return strategies list */ - public List<String> getAvailableRuleNames() { - List<String> result = new ArrayList<String>(); - for (String ruleName : RuleStorage.getRuleNames()) { - // remove last .java - String shortRuleName = ruleName.substring(0, ruleName.length() - 5); - result.add(shortRuleName); - } - return result; - } - - // Strategies - public List<Strategy> getStrategies() { List<Strategy> result = new ArrayList<Strategy>(); try { @@ -405,6 +389,11 @@ return result; } + /** + * Set parameters strategies. + * + * @param strategies + */ public void setStrategies(Object[] strategies) { List<Strategy> result = new ArrayList<Strategy>(); for (Object o : strategies) { @@ -413,8 +402,11 @@ param.setStrategies(result); } - // Population - + /** + * Get population list to fill JList in paramUI. + * + * @return populations list + */ public List<Population> getPopulations() { List<Population> result = new ArrayList<Population>(); @@ -444,6 +436,11 @@ return result; } + /** + * Set parameter population. + * + * @param populations populations to set + */ public void setPopulations(Object[] populations) { List<Population> result = new ArrayList<Population>(); for (Object o : populations) { @@ -453,7 +450,6 @@ } // Years - public int getNumberOfYear() { return param.getNumberOfYear(); } @@ -545,13 +541,17 @@ } public void removeTagValue(String tag) { - log.debug("removeTagValue: " + tag); + if (log.isDebugEnabled()) { + log.debug("removeTagValue: " + tag); + } param.getTagValue().remove(tag); } public void saveTagValue(String simulatorName) { Map<String, String> tagValues = param.getTagValue(); - log.debug("call saveTagValue: " + tagValues); + if (log.isDebugEnabled()) { + log.debug("call saveTagValue: " + tagValues); + } IsisFish.config.setDefaultTagValues(tagValues); IsisFish.config.setSimulatorClassfile(simulatorName);
participants (1)
-
chatellier@users.labs.libre-entreprise.org