Author: chatellier Date: 2011-06-01 12:32:08 +0000 (Wed, 01 Jun 2011) New Revision: 3347 Log: Add support for discrete equation domain Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.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/SensitivityInputHandler.java Modified: isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx =================================================================== --- isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx 2011-06-01 08:58:32 UTC (rev 3346) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/input/InputOneEquationUI.jaxx 2011-06-01 12:32:08 UTC (rev 3347) @@ -40,6 +40,8 @@ <!-- Selected equation --> <fr.ifremer.isisfish.entities.Equation id='selectedEquation' javaBean='null'/> + <Boolean id="autoSaveModification" javaBean="true" /> + <import> java.lang.reflect.Method; java.io.File; @@ -172,7 +174,13 @@ setFormule((Formule)formuleComboBox.getSelectedItem()); setEditorText(); } - editor.getCurrentEditor().addDocumentListener(listener); + + // utilisee lors de l'edition des equations dans l'interface de sensibilité + // le contenu de l'equation ne doit pas automatiquement + // etre sauvé dans l'entité (pas de sens pour un facteur discret de type equation) + if (autoSaveModification) { + editor.getCurrentEditor().addDocumentListener(listener); + } } protected void setComboModel() { 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-06-01 08:58:32 UTC (rev 3346) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2011-06-01 12:32:08 UTC (rev 3347) @@ -185,7 +185,8 @@ } ]]></script> <JPanel id='content'> - <Table constraints='BorderLayout.CENTER'> + <JScrollPane constraints='BorderLayout.CENTER'> + <Table> <row> <cell fill='both' weightx='1' weighty='1'> <JScrollPane preferredSize="{new Dimension(200, 150)}"> @@ -297,12 +298,14 @@ </row> <row> <cell fill='both' columns='2' weightx='1' weighty='1'> - <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' formule='{getFormule()}' text='{getText()}' - constructorParams='this' bean='{getBean()}' clazz='{getClazz()}' beanProperty='{getBeanProperty()}' active='{isContinueSelected()}' + <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' constructorParams='this' + autoSaveModification="false" formule='{getFormule()}' text='{getText()}' + bean='{getBean()}' clazz='{getClazz()}' beanProperty='{getBeanProperty()}' active='{isContinueSelected()}' formuleCategory='{getFormuleCategory()}' selectedEquation='{getSelectedEquation()}' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> </row> </Table> + </JScrollPane> </JPanel> </ContinuousPanelContainerUI> 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-06-01 08:58:32 UTC (rev 3346) +++ isis-fish/branches/3.3.1/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityInputHandler.java 2011-06-01 12:32:08 UTC (rev 3347) @@ -67,6 +67,7 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; +import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.MatrixContinuousDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.types.RangeOfValues; @@ -74,6 +75,7 @@ import fr.ifremer.isisfish.ui.input.InputAction; import fr.ifremer.isisfish.ui.input.InputContentUI; import fr.ifremer.isisfish.ui.input.InputHandler; +import fr.ifremer.isisfish.ui.input.InputOneEquationUI; import fr.ifremer.isisfish.ui.input.tree.FisheryDataProvider; import fr.ifremer.isisfish.ui.input.tree.FisheryTreeHelper; import fr.ifremer.isisfish.ui.input.tree.FisheryTreeNode; @@ -432,7 +434,7 @@ i++; JComponent c = null; if (o != null) { - c = getEditorWithValue(factorWizardUI, dDomain, o); + c = getEditorWithValue(factorWizardUI, factor, dDomain, o); } else { if (log.isWarnEnabled()) { @@ -557,7 +559,7 @@ * * Il serait plus interessant de le faire sur les types et non sur les * valeur mais pour {@link RangeOfValues} par exemple, seule la valeur - * a un typ Float... donc pas evident. + * a un type Float... donc pas evident. * * @param value value * @return continuous enabled @@ -707,7 +709,7 @@ result = ui; } catch (Exception ex) { - throw new IsisFishRuntimeException("Can't restore intial factor database property", ex); + throw new IsisFishRuntimeException("Can't restore initial factor database property", ex); } } // TODO path with no # (normalement pas possible pour les equations) @@ -771,7 +773,7 @@ * @param context for equation * @return component */ - protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Domain domain, Object value) { + protected JComponent getEditorWithValue(FactorWizardUI factorWizardUI, Factor factor, Domain domain, Object value) { JComponent result = null; @@ -791,6 +793,39 @@ result = new RuleChooser(factorWizardUI); ((RuleChooser)result).setRulesList((List<Rule>)value); } + else if (domain instanceof EquationDiscreteDomain) { + String factorPath = factor.getPath(); + if (factor.getPath().indexOf('#') != -1) { + String topiaId = factorPath.substring(0, factorPath.lastIndexOf('#')); + String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); + + // get bean in database + try { + TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); + TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); + + String getter = "get" + StringUtils.capitalize(property); + Method m = entity.getClass().getMethod(getter); + Equation equation = (Equation)m.invoke(entity); + + // fill component + InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); + ui.setAutoSaveModification(false); + ui.setFormuleCategory(equation.getCategory()); + ui.setText(_("isisfish.common.equation")); // can't get real name + ui.setClazz(value.getClass()); + ui.setBeanProperty(property); + ui.setBean(entity); // set bean fire content modification event + ui.getEditor().setText((String)value); + ui.setActive(true); + + result = ui; + } catch (Exception ex) { + throw new IsisFishRuntimeException("Can't restore initial factor database property", ex); + } + } + // TODO path with no # (normalement pas possible pour les equations) + } else if (value instanceof String) { // valeur nom typées ??? result = new JTextField(); @@ -812,7 +847,7 @@ * @return component copy */ public JComponent getNewDiscreteComponent(FactorWizardUI factorWizardUI) { - + JComponent result = null; String factorPath = factorWizardUI.getFactorPath(); @@ -821,7 +856,6 @@ String property = factorPath.substring(factorPath.lastIndexOf('#') + 1); TopiaContext topiaContext = factorWizardUI.getContextValue(TopiaContext.class); - try { // get bean in database TopiaEntityContextable entity = (TopiaEntityContextable)topiaContext.findByTopiaId(topiaId); @@ -839,7 +873,21 @@ } else if (value instanceof RangeOfValues) { RangeOfValues rangeOfValues = (RangeOfValues)value; result = new JTextField(rangeOfValues.getValues()); + } else if (value instanceof Equation) { + Equation equation = (Equation)value; + // fill component + InputOneEquationUI ui = new InputOneEquationUI(factorWizardUI); + ui.setAutoSaveModification(false); + ui.setText(equation.getContent()); + ui.setFormuleCategory(equation.getCategory()); + ui.setText(_("isisfish.common.equation")); // can't get real name + ui.setClazz(value.getClass()); + ui.setBeanProperty(property); + ui.setBean(entity); + ui.setActive(true); + result = ui; } + } catch (Exception ex) { throw new IsisFishRuntimeException("Can't restore intial factor database property", ex); } @@ -866,7 +914,11 @@ } } } - + + if (log.isDebugEnabled()) { + log.debug("Component for path " + factorPath + " is " + result); + } + return result; } @@ -910,12 +962,12 @@ /** * Save a continous factor. * - * @param name - * @param comment - * @param path - * @param panel - * @param action - * @param exist + * @param name factor name + * @param comment comment + * @param path factor path + * @param panel panel + * @param action action + * @param exist exist */ protected void saveContinue(String name, String comment, String path, ContinuousPanelContainerUI panel, @@ -992,14 +1044,40 @@ String comment, String path, List<JComponent> components, SimulAction action, boolean exist) { List<Object> values = new ArrayList<Object>(); - for (JComponent c : components) { - values.add(getComponentValue(c)); + + boolean ruleFactor = false; + boolean equationFactor = false; + for (JComponent component : components) { + + // get internat component value + Object result = null; + if (component instanceof JTextComponent) { + result = ((JTextComponent) component).getText(); + } else if (component instanceof MatrixPanelEditor) { + result = ((MatrixPanelEditor) component).getMatrix(); + } else if (component instanceof InputOneEquationUI) { + result = ((InputOneEquationUI) component).getEditor().getText(); + equationFactor = true; + } else if (component instanceof RuleChooser) { + result = ((RuleChooser)component).getRulesList(); + ruleFactor = true; + } + + values.add(result); } - action.addDiscreteFactor(name, comment, path, values, exist); + + if (ruleFactor) { + action.addDiscreteRuleFactor(name, comment, path, values, exist); + } else if (equationFactor) { + action.addDiscreteEquationFactor(name, comment, path, values, exist); + } else { + action.addDiscreteFactor(name, comment, path, values, exist); + } } /** - * Return value in swing component that could be next used into factor. + * Return value in swing component that could be next used into factor + * for discrete factor values. * * @param component component * @return factor value @@ -1010,9 +1088,9 @@ result = ((JTextComponent) component).getText(); } else if (component instanceof MatrixPanelEditor) { result = ((MatrixPanelEditor) component).getMatrix(); - } /*else if (component instanceof InputOneEquationUI) { - result = ((InputOneEquationUI) component).getEditor().getText();*/ - else if (component instanceof RuleChooser) { + } else if (component instanceof InputOneEquationUI) { + result = ((InputOneEquationUI) component).getEditor().getText(); + } else if (component instanceof RuleChooser) { result = ((RuleChooser)component).getRulesList(); } if (log.isDebugEnabled()) {