r80 - in trunk: . jmexico-editor jmexico-editor/src jmexico-editor/src/main/java/fr/reseaumexico/editor jmexico-editor/src/main/resources/i18n jmexico-editor-demo jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo
Author: tchemit Date: 2012-10-06 16:56:19 +0200 (Sat, 06 Oct 2012) New Revision: 80 Url: http://forge.codelutin.com/repositories/revision/jmexico/80 Log: fixes #1573: Add Clone scenario operation fixes #1574: Improve jaxx files refs #1572: Upgrade some librairies and plugins (optimize dependencies) Added: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioModel.java trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.css trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.jaxx trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.css Removed: trunk/jmexico-editor/src/site/ Modified: trunk/jmexico-editor-demo/pom.xml trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUI.jaxx trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIHandler.java trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIModel.java trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/RunMexicoEditorDemo.java trunk/jmexico-editor/pom.xml trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.jaxx trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignTableModel.java trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties trunk/pom.xml Modified: trunk/jmexico-editor/pom.xml =================================================================== --- trunk/jmexico-editor/pom.xml 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor/pom.xml 2012-10-06 14:56:19 UTC (rev 80) @@ -65,6 +65,11 @@ <dependency> <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-common</artifactId> + </dependency> + + <dependency> + <groupId>org.swinglabs.swingx</groupId> <artifactId>swingx-core</artifactId> </dependency> Added: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioModel.java =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioModel.java (rev 0) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioModel.java 2012-10-06 14:56:19 UTC (rev 80) @@ -0,0 +1,82 @@ +package fr.reseaumexico.editor; + +/* + * #%L + * JMexico :: Swing Editor + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Réseau Mexico, Codelutin + * %% + * 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% + */ + +import fr.reseaumexico.model.Scenario; +import org.jdesktop.beans.AbstractSerializableBean; + +import java.util.Collection; + +/** + * Model for clone scenario operation. + * + * @author tchemit <chemit@codelutin.com> + * @since 0.7 + */ +public class CloneScenarioModel extends AbstractSerializableBean { + + private static final long serialVersionUID = 1L; + + protected Collection<Scenario> scenarios; + + protected Scenario selectedScenario; + + protected String scenarioName; + + public Collection<Scenario> getScenarios() { + return scenarios; + } + + public Scenario getSelectedScenario() { + return selectedScenario; + } + + public String getScenarioName() { + return scenarioName; + } + + public void setSelectedScenario(Scenario selectedScenario) { + Object oldValue = this.selectedScenario; + this.selectedScenario = selectedScenario; + firePropertyChange("selectedScenario", oldValue, selectedScenario); + } + + public void setScenarioName(String scenarioName) { + Object oldValue = this.scenarioName; + this.scenarioName = scenarioName; + firePropertyChange("scenarioName", oldValue, scenarioName); + } + + public void setScenarios(Collection<Scenario> scenarios) { + this.scenarios = scenarios; + firePropertyChange("scenarios", null, scenarios); + } + + public void copyTo(CloneScenarioModel model) { + model.setScenarioName(getScenarioName()); + model.setScenarios(getScenarios()); + model.setSelectedScenario(getSelectedScenario()); + } +} Property changes on: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.css =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.css (rev 0) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.css 2012-10-06 14:56:19 UTC (rev 80) @@ -0,0 +1,38 @@ +/* + * #%L + * JMexico :: Swing Editor + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Réseau Mexico, Codelutin + * %% + * 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% + */ +#scenarioNameLabel { + text:"jmexico.scenario.clone.name"; +} + +#scenarioNameEditor { + text:{model.getScenarioName()}; +} + +#selectedScenarioLabel { + text:"jmexico.scenario.clone.selected"; +} + +#selectedScenarioEditor { + selectedItem:{model.getSelectedScenario()}; +} \ No newline at end of file Property changes on: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.jaxx =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.jaxx (rev 0) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.jaxx 2012-10-06 14:56:19 UTC (rev 80) @@ -0,0 +1,59 @@ +<!-- + #%L + JMexico :: Swing Editor + $Id$ + $HeadURL$ + %% + Copyright (C) 2011 - 2012 Réseau Mexico, Codelutin + %% + 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% + --> +<Table id='panel' layout='{new BorderLayout()}'> + + <CloneScenarioModel id='model'/> + + <script> + <![CDATA[ +public void init(CloneScenarioModel model) { + model.copyTo(this.model); + + // init selected scenario + SwingUtil.fillComboBox(selectedScenarioEditor, + model.getScenarios(), + model.getSelectedScenario()); + } + ]]> + </script> + + <row fill='both'> + <cell> + <JLabel id='scenarioNameLabel'/> + </cell> + <cell> + <JTextField id='scenarioNameEditor' + onKeyReleased='model.setScenarioName(((JTextField)event.getSource()).getText())'/> + </cell> + </row> + <row fill='both'> + <cell> + <JLabel id='selectedScenarioLabel'/> + </cell> + <cell> + <JComboBox id='selectedScenarioEditor' + onItemStateChanged='InputDesignEditorHandler.onSelectedScenarioChanged(model, event)'/> + </cell> + </row> +</Table> Property changes on: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/CloneScenarioPanel.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.css =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.css (rev 0) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.css 2012-10-06 14:56:19 UTC (rev 80) @@ -0,0 +1,49 @@ +/* + * #%L + * JMexico :: Swing Editor + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 - 2012 Réseau Mexico, Codelutin + * %% + * 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% + */ +#inputDesignTable { + model:{getModel()}; + columnControlVisible:true; + rowHeight:20; +} + +#editorToolBar { + floatable:false; + opaque:false; +} + +#addScenarioButton { + text:"jmexico.action.add.scenario"; +} + +#removeScenarioButton { + text:"jmexico.action.remove.scenario"; +} + +#cloneScenarioButton { + text:"jmexico.action.clone.scenario"; +} + +#selectedScenarioEditor { + selectedItem:{model.getSelectedScenario()}; +} \ No newline at end of file Property changes on: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.jaxx =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.jaxx 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditor.jaxx 2012-10-06 14:56:19 UTC (rev 80) @@ -26,37 +26,18 @@ <import> fr.reseaumexico.model.InputDesign - fr.reseaumexico.model.Factor - fr.reseaumexico.editor.InputDesignTableModel - fr.reseaumexico.editor.factorValue.FactorValueCellEditor - fr.reseaumexico.editor.factorValue.FactorValueCellRenderer - fr.reseaumexico.editor.MexicoDecoratorProvider - jaxx.runtime.swing.renderer.DecoratorProviderTableCellRenderer org.jdesktop.swingx.JXTable - javax.swing.JTable </import> - <InputDesignEditorHandler id='handler'/> + <InputDesignEditorHandler id='handler' constructorParams='this'/> <InputDesignTableModel id='model' constructorParams='this'/> - <FactorValueCellEditor id='cellEditor' constructorParams='this'/> - - <FactorValueCellRenderer id='cellRenderer' constructorParams='this'/> - <script> <![CDATA[ private void $afterCompleteSetup() { - - // table renderer - // TODO sletellier 20111221 : do on time for all, put in context ? - MexicoDecoratorProvider mexicoDecoratorProvider = new MexicoDecoratorProvider(); - inputDesignTable.setDefaultRenderer(Factor.class, new DecoratorProviderTableCellRenderer(mexicoDecoratorProvider)); - inputDesignTable.setDefaultRenderer(Object.class, getCellRenderer()); - - // cell editor - inputDesignTable.setDefaultEditor(Object.class, getCellEditor()); + getHandler().initUI(); } public void setInputDesign(InputDesign inputDesign) { @@ -70,21 +51,17 @@ </script> <JScrollPane constraints='BorderLayout.CENTER'> - <JXTable id='inputDesignTable' - model='{getModel()}' - columnControlVisible='true' - rowHeight='20'/> + <JXTable id='inputDesignTable'/> </JScrollPane> - <JPanel id='factorActionPanel' constraints='BorderLayout.SOUTH'> + <JToolBar id='editorToolBar' constraints='BorderLayout.SOUTH' + layout='{new GridLayout(1,0)}'> <JButton id='addScenarioButton' - text='jmexico.add.scenario' - constraints='BorderLayout.WEST' - onActionPerformed='getHandler().addScenario(this)'/> + onActionPerformed='getHandler().addScenario()'/> <JButton id='removeScenarioButton' - text='jmexico.remove.scenario' - constraints='BorderLayout.EAST' - onActionPerformed='getHandler().removeScenario(this)'/> - </JPanel> + onActionPerformed='getHandler().removeScenario()'/> + <JButton id='cloneScenarioButton' + onActionPerformed='getHandler().cloneScenario()'/> + </JToolBar> </JPanel> Modified: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignEditorHandler.java 2012-10-06 14:56:19 UTC (rev 80) @@ -25,14 +25,19 @@ package fr.reseaumexico.editor; import com.google.common.collect.Maps; +import fr.reseaumexico.editor.factorValue.FactorValueCellEditor; +import fr.reseaumexico.editor.factorValue.FactorValueCellRenderer; import fr.reseaumexico.model.Factor; import fr.reseaumexico.model.InputDesign; import fr.reseaumexico.model.Scenario; import fr.reseaumexico.model.ScenarioImpl; +import jaxx.runtime.swing.renderer.DecoratorProviderTableCellRenderer; +import org.apache.commons.lang3.StringUtils; + +import javax.swing.JOptionPane; +import java.awt.event.ItemEvent; import java.util.Collection; import java.util.Map; -import javax.swing.JOptionPane; -import org.apache.commons.lang3.StringUtils; import static org.nuiton.i18n.I18n._; @@ -42,72 +47,98 @@ */ public class InputDesignEditorHandler { - public void addScenario(InputDesignEditor editor) { - InputDesign inputDesign = editor.getInputDesign(); + private final InputDesignEditor ui; - String selectedName = JOptionPane.showInputDialog(editor, + public InputDesignEditorHandler(InputDesignEditor ui) { + this.ui = ui; + } + + public void initUI() { + + // table renderer + // TODO sletellier 20111221 : do on time for all, put in context ? + MexicoDecoratorProvider mexicoDecoratorProvider = new MexicoDecoratorProvider(); + ui.inputDesignTable.setDefaultRenderer(Factor.class, new DecoratorProviderTableCellRenderer(mexicoDecoratorProvider)); + ui.inputDesignTable.setDefaultRenderer(Object.class, new FactorValueCellRenderer(ui)); + + // cell editor + ui.inputDesignTable.setDefaultEditor(Object.class, new FactorValueCellEditor(ui)); + } + + public void addScenario() { + InputDesign inputDesign = ui.getInputDesign(); + + String selectedName = JOptionPane.showInputDialog( + ui, _("jmexico.scenario.inputName"), _("jmexico.scenario.inputName.title"), JOptionPane.QUESTION_MESSAGE); + if (StringUtils.isBlank(selectedName)) { + + JOptionPane.showMessageDialog( + ui, + _("jmexico.error.scenario.name.required"), + _("jmexico.error.title"), + JOptionPane.ERROR_MESSAGE); + + return; + } + // if user enter name - if (StringUtils.isNotBlank(selectedName)) { - // check that name is never used - Collection<Scenario> scenarios = inputDesign.getScenario(); + // check that name is never used + Collection<Scenario> scenarios = inputDesign.getScenario(); - int maxOrder = 0; + if (scenarios != null) { + for (Scenario scenario : scenarios) { + if (selectedName.equalsIgnoreCase(scenario.getName())) { - if (scenarios != null) { - for (Scenario scenario : scenarios) { - if (selectedName.equalsIgnoreCase(scenario.getName())) { + JOptionPane.showMessageDialog( + ui, + _("jmexico.error.title"), + _("jmexico.error.scenario.name.used", selectedName), + JOptionPane.ERROR_MESSAGE); - JOptionPane.showMessageDialog(editor, - _("jmexico.error.title"), - _("jmexico.error.scenario.name.used"), - JOptionPane.ERROR_MESSAGE); - - return; - } - int orderNumber = scenario.getOrderNumber(); - if (maxOrder < orderNumber) { - maxOrder = orderNumber; - } + return; } } + } - // create new scenario - Scenario scenarioToAdd = new ScenarioImpl(); - // set last order - // TODO sletellier 20111219 : ask user order number - scenarioToAdd.setOrderNumber(maxOrder + 1); + int maxOrder = getMaxOrder(scenarios); - // set name - scenarioToAdd.setName(selectedName); + // create new scenario + Scenario scenarioToAdd = new ScenarioImpl(); - // create all empty factor values - Collection<Factor> factors = inputDesign.getExperimentDesign().getFactor(); - Map<Factor, Object> factorValues = Maps.newLinkedHashMap(); - for (Factor factor : factors) { - factorValues.put(factor, null); - } - scenarioToAdd.setFactorValues(factorValues); + // set last order + // TODO sletellier 20111219 : ask user order number + scenarioToAdd.setOrderNumber(maxOrder + 1); - inputDesign.addScenario(scenarioToAdd); + // set name + scenarioToAdd.setName(selectedName); + + // create all empty factor values + Collection<Factor> factors = inputDesign.getExperimentDesign().getFactor(); + Map<Factor, Object> factorValues = Maps.newLinkedHashMap(); + for (Factor factor : factors) { + factorValues.put(factor, null); } + scenarioToAdd.setFactorValues(factorValues); + + inputDesign.addScenario(scenarioToAdd); } - public void removeScenario(InputDesignEditor editor) { - InputDesign inputDesign = editor.getInputDesign(); + public void removeScenario() { + InputDesign inputDesign = ui.getInputDesign(); // show scenario select dialog Collection<Scenario> scenarios = inputDesign.getScenario(); Scenario scenario = (Scenario) JOptionPane.showInputDialog( - editor, + ui, _("jmexico.scenario.selectRemove"), _("jmexico.scenario.selectRemove.title"), - JOptionPane.PLAIN_MESSAGE, + JOptionPane.QUESTION_MESSAGE, null, scenarios.toArray(), null); @@ -117,4 +148,141 @@ inputDesign.removeScenario(scenario); } } + + public void cloneScenario() { + + InputDesign inputDesign = ui.getInputDesign(); + + Collection<Scenario> scenarios = inputDesign.getScenario(); + + CloneScenarioModel model = new CloneScenarioModel(); + model.setScenarios(scenarios); + + boolean accept = showCloneScenarioUI(model); + + if (accept) { + + // clone scenario + + int maxOrder = getMaxOrder(scenarios); + + Scenario scenarioToAdd = new ScenarioImpl(); + + // set last order + // TODO sletellier 20111219 : ask user order number + scenarioToAdd.setOrderNumber(maxOrder + 1); + + // set name + scenarioToAdd.setName(model.getScenarioName()); + + Scenario selectedScenario = model.getSelectedScenario(); + + // create all factor values (clone selected scenario values) + Collection<Factor> factors = inputDesign.getExperimentDesign().getFactor(); + Map<Factor, Object> factorValues = Maps.newLinkedHashMap(); + for (Factor factor : factors) { + Object factorValue = selectedScenario.getFactorValue(factor); + + factorValues.put(factor, factorValue); + } + scenarioToAdd.setFactorValues(factorValues); + + inputDesign.addScenario(scenarioToAdd); + } + } + + protected boolean showCloneScenarioUI(CloneScenarioModel model) { + + // show ui + + CloneScenarioPanel panel = new CloneScenarioPanel(); + panel.init(model); + + int response = JOptionPane.showConfirmDialog( + ui, + panel, + _("jmexico.scenario.clone.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + boolean doIt = response == JOptionPane.OK_OPTION; + + if (doIt) { + + // user ask to perform operation + + //copy back model + panel.getModel().copyTo(model); + + // validate model + boolean valid = true; + + Scenario selectedScenario = model.getSelectedScenario(); + if (selectedScenario == null) { + + // no scenario selected + JOptionPane.showMessageDialog( + ui, + _("jmexico.error.scenario.not.selected"), + _("jmexico.error.title"), + JOptionPane.ERROR_MESSAGE); + + valid = false; + } + + if (valid) { + + // check scenario name is not used + String selectedName = model.getScenarioName(); + + if (StringUtils.isBlank(selectedName)) { + + valid = false; + JOptionPane.showMessageDialog( + ui, + _("jmexico.error.scenario.name.required"), + _("jmexico.error.title"), + JOptionPane.ERROR_MESSAGE); + + } else { + for (Scenario scenario : model.getScenarios()) { + if (selectedName.equalsIgnoreCase(scenario.getName())) { + + JOptionPane.showMessageDialog( + ui, + _("jmexico.error.scenario.name.used", selectedName), + _("jmexico.error.title"), + JOptionPane.ERROR_MESSAGE); + + valid = false; + break; + } + } + } + + } + + doIt = valid || showCloneScenarioUI(model); + } + + return doIt; + } + + protected int getMaxOrder(Collection<Scenario> scenarios) { + int maxOrder = 0; + for (Scenario scenario : scenarios) { + int orderNumber = scenario.getOrderNumber(); + maxOrder = Math.max(maxOrder, orderNumber); + } + return maxOrder; + } + + public static void onSelectedScenarioChanged(CloneScenarioModel model, + ItemEvent event) { + + if (event.getStateChange() == ItemEvent.SELECTED) { + Scenario item = (Scenario) event.getItem(); + model.setSelectedScenario(item); + } + } } Modified: trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignTableModel.java =================================================================== --- trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignTableModel.java 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor/src/main/java/fr/reseaumexico/editor/InputDesignTableModel.java 2012-10-06 14:56:19 UTC (rev 80) @@ -41,6 +41,8 @@ import javax.swing.table.TableModel; import jaxx.runtime.JAXXContext; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n._; @@ -52,6 +54,9 @@ private static final long serialVersionUID = 1L; + /** Logger. */ + private static final Log log = LogFactory.getLog(InputDesignTableModel.class); + protected TableModel delegate; protected InputDesign inputDesign; @@ -63,6 +68,9 @@ public InputDesignTableModel(JAXXContext context) { // search specific factory in context factory = context.getContextValue(FactorValueEditorFactory.class); + if (log.isInfoEnabled()) { + log.info("Factory to use: "+factory); + } delegate = new DefaultTableModel(); } Modified: trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties =================================================================== --- trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_en_GB.properties 2012-10-06 14:56:19 UTC (rev 80) @@ -1,9 +1,18 @@ -jmexico.add.scenario=Add scenario -jmexico.error.scenario.name.used=Error \: scenario name '%1$s' is already used. +jmexico.action.add.scenario=Add scenario +jmexico.action.clone.scenario=Clone scenario +jmexico.action.remove.scenario=Remove scenario +jmexico.error.scenario.name.required=Error\: Name of scenario is mandatory +jmexico.error.scenario.name.used=Error\: scenario name '%1$s' is already used. +jmexico.error.scenario.not.selected=Error\: No scenario selected. jmexico.error.title=Error jmexico.factor.name=Factor -jmexico.remove.scenario=Delete scenario +jmexico.scenario.clone.name=Name of new scenario +jmexico.scenario.clone.selected=Scenario to clone +jmexico.scenario.clone.title=Clone a scenario jmexico.scenario.inputName=Name of scenario to add \: jmexico.scenario.inputName.title=Input a name for scenario to add jmexico.scenario.selectRemove=Select scenario to delete jmexico.scenario.selectRemove.title=Select scenario to remove +jmexico.title.add.scenario=Add scenario +jmexico.title.clone.scenario=Clone scenario +jmexico.title.remove.scenario=Remove scenario Modified: trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties =================================================================== --- trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor/src/main/resources/i18n/jmexico-editor_fr_FR.properties 2012-10-06 14:56:19 UTC (rev 80) @@ -1,9 +1,19 @@ -jmexico.add.scenario=Ajouter un scénario +jmexico.action.add.scenario=Ajouter un scénario +jmexico.action.clone.scenario=Dupliquer un scénario +jmexico.action.remove.scenario=Supprimer un scénario +jmexico.error.scenario.name.required=Erreur \: Le nom du scénario est obligatoire jmexico.error.scenario.name.used=Erreur \: le scenario '%1$s' est déjà utilisé. +jmexico.error.scenario.not.selected=Erreur \: scénario à cloner non sélectionné. jmexico.error.title=Erreur jmexico.factor.name=Facteur jmexico.remove.scenario=Supprimer un scénario +jmexico.scenario.clone.name=Nom du nouveau scénario +jmexico.scenario.clone.selected=Scénario à cloner +jmexico.scenario.clone.title= jmexico.scenario.inputName=Nom du scénario à ajouter \: -jmexico.scenario.inputName.title=Enter un nom pour le scenario à ajouter +jmexico.scenario.inputName.title= jmexico.scenario.selectRemove=Selection du scénario à supprimer -jmexico.scenario.selectRemove.title=Select scenario to remove +jmexico.scenario.selectRemove.title= +jmexico.title.add.scenario=Ajouter un scénario +jmexico.title.clone.scenario=Dupliquer un scénario +jmexico.title.remove.scenario=Supprimer un scénario Modified: trunk/jmexico-editor-demo/pom.xml =================================================================== --- trunk/jmexico-editor-demo/pom.xml 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor-demo/pom.xml 2012-10-06 14:56:19 UTC (rev 80) @@ -46,6 +46,11 @@ <artifactId>jaxx-widgets</artifactId> </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-common</artifactId> + </dependency> + <!-- logging dependencies --> <dependency> <groupId>commons-logging</groupId> Modified: trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUI.jaxx =================================================================== --- trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUI.jaxx 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUI.jaxx 2012-10-06 14:56:19 UTC (rev 80) @@ -25,21 +25,24 @@ <JFrame id='mainFrame' decorator='help' width='800' height='800' layout='{new BorderLayout()}' - onWindowClosing='getHandler().closeApplication(this)'> + onWindowClosing='getHandler().closeApplication()'> <import> fr.reseaumexico.editor.InputDesignEditor fr.reseaumexico.model.InputDesign </import> - <MexicoEditorDemoUIHandler id="handler" - initializer='getContextValue(MexicoEditorDemoUIHandler.class)'/> + <MexicoEditorDemoUIHandler id="handler" constructorParams='this'/> <MexicoEditorDemoUIModel id="model"/> <script> <![CDATA[ +public void init() { + getHandler().initUI(); +} + public void setInputDesign(InputDesign inputDesign) { getModel().setInputDesign(inputDesign); inputDesignEditor.setInputDesign(inputDesign); @@ -55,18 +58,19 @@ <JMenuBar id='menu'> <JMenu id='menuFile'> <JMenuItem id='menuFileOpen' - onActionPerformed="getHandler().openFile(this)"/> + onActionPerformed="getHandler().openFile()"/> <JMenuItem id='menuFileSave' enabled='{getModel().isOptionChanged()}' - onActionPerformed="getHandler().saveFile(this)"/> + onActionPerformed="getHandler().saveFile()"/> <JSeparator/> <JMenuItem id='exit' - onActionPerformed="getHandler().closeApplication(this)"/> + onActionPerformed="getHandler().closeApplication()"/> </JMenu> </JMenuBar> - <InputDesignEditor id='inputDesignEditor' constraints='BorderLayout.CENTER'/> + <InputDesignEditor id='inputDesignEditor' constructorParams='this' + constraints='BorderLayout.CENTER'/> </JFrame> Modified: trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIHandler.java =================================================================== --- trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIHandler.java 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIHandler.java 2012-10-06 14:56:19 UTC (rev 80) @@ -31,14 +31,14 @@ import fr.reseaumexico.model.event.InputDesignScenarioListener; import fr.reseaumexico.model.parser.InputDesignParser; import fr.reseaumexico.model.writer.InputDesignXmlWriter; -import java.io.File; -import java.io.IOException; -import javax.swing.JFileChooser; -import jaxx.runtime.context.JAXXInitialContext; import jaxx.runtime.swing.ErrorDialogUI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JFileChooser; +import java.io.File; +import java.io.IOException; + import static org.nuiton.i18n.I18n._; /** @@ -49,23 +49,21 @@ */ public class MexicoEditorDemoUIHandler { - /** - * Logger - */ + /** Logger */ private static Log log = LogFactory.getLog(MexicoEditorDemoUIHandler.class); - public void closeApplication(MexicoEditorDemoUI ui) { + private final MexicoEditorDemoUI ui; + + public MexicoEditorDemoUIHandler(MexicoEditorDemoUI ui) { + this.ui = ui; + } + + public void closeApplication() { ui.dispose(); } - public MexicoEditorDemoUI initUI(JAXXInitialContext context) { + public MexicoEditorDemoUI initUI() { - // share handler - context.add(this); - - // construt main UI - MexicoEditorDemoUI ui = new MexicoEditorDemoUI(context); - // display ui.setVisible(true); @@ -75,44 +73,53 @@ return ui; } - public void openFile(final MexicoEditorDemoUI ui) { + public void openFile() { JFileChooser fileChooser = new JFileChooser(); fileChooser.setDialogTitle(_("jmexico.file.open.dialog")); int returnVal = fileChooser.showOpenDialog(ui); if (returnVal == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); - InputDesign inputDesign = readInputDesignFile(selectedFile); - // add listener to listen option values changes - inputDesign.addInputDesignFactorListener(new InputDesignFactorListener() { + loadInputFile(selectedFile); + } + } - @Override - public void factorValueChanged(InputDesignFactorEvent event) { - ui.setInputDesign(event.getSource()); - } - }); - // add listener to listen option values changes - inputDesign.addInputDesignScenarioListener(new InputDesignScenarioListener() { + public void loadInputFile(File selectedFile) { - @Override - public void scenarioAdded(InputDesignScenarioEvent event) { - ui.setInputDesign(event.getSource()); - } + if (log.isInfoEnabled()) { + log.info("Load input file: " + selectedFile); + } + InputDesign inputDesign = readInputDesignFile(selectedFile); - @Override - public void scenarioRemoved(InputDesignScenarioEvent event) { - ui.setInputDesign(event.getSource()); - } - }); + // add listener to listen option values changes + inputDesign.addInputDesignFactorListener(new InputDesignFactorListener() { - ui.setInputDesign(inputDesign); + @Override + public void factorValueChanged(InputDesignFactorEvent event) { + ui.setInputDesign(event.getSource()); + } + }); + // add listener to listen option values changes + inputDesign.addInputDesignScenarioListener(new InputDesignScenarioListener() { - // keep selected file - ui.getModel().setInputDesignFile(selectedFile); - } + @Override + public void scenarioAdded(InputDesignScenarioEvent event) { + ui.setInputDesign(event.getSource()); + } + + @Override + public void scenarioRemoved(InputDesignScenarioEvent event) { + ui.setInputDesign(event.getSource()); + } + }); + + ui.setInputDesign(inputDesign); + + // keep selected file + ui.getModel().setInputDesignFile(selectedFile); } - public void saveFile(MexicoEditorDemoUI ui) { + public void saveFile() { // get selected file File selectedFile = ui.getModel().getInputDesignFile(); Modified: trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIModel.java =================================================================== --- trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIModel.java 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/MexicoEditorDemoUIModel.java 2012-10-06 14:56:19 UTC (rev 80) @@ -25,23 +25,25 @@ package fr.reseaumexico.editor.demo; import fr.reseaumexico.model.InputDesign; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; +import org.jdesktop.beans.AbstractSerializableBean; + import java.io.File; -/** - * @author sletellier <letellier@codelutin.com> - */ -public class MexicoEditorDemoUIModel { +/** @author sletellier <letellier@codelutin.com> */ +public class MexicoEditorDemoUIModel extends AbstractSerializableBean { - protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private static final long serialVersionUID = 1L; public static final String PROPERTY_OPTION_CHANGED = "optionChanged"; + public static final String PROPERTY_INPUT_DESIGN = "inputDesign"; + public static final String PROPERTY_INPUT_DESIGN_FILE = "inputDesignFile"; protected InputDesign inputDesign; + protected File inputDesignFile; + protected boolean optionChanged; public File getInputDesignFile() { @@ -75,23 +77,4 @@ firePropertyChange(PROPERTY_OPTION_CHANGED, oldValue, optionChanged); } - public void addPropertyChangeListener(PropertyChangeListener listener) { - pcs.addPropertyChangeListener(listener); - } - - public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - pcs.addPropertyChangeListener(propertyName, listener); - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - pcs.removePropertyChangeListener(listener); - } - - public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - pcs.removePropertyChangeListener(propertyName, listener); - } - - protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - pcs.firePropertyChange(propertyName, oldValue, newValue); - } } Modified: trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/RunMexicoEditorDemo.java =================================================================== --- trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/RunMexicoEditorDemo.java 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/jmexico-editor-demo/src/main/java/fr/reseaumexico/editor/demo/RunMexicoEditorDemo.java 2012-10-06 14:56:19 UTC (rev 80) @@ -24,6 +24,8 @@ */ package fr.reseaumexico.editor.demo; +import fr.reseaumexico.editor.factorValue.FactorValueCellEditor; +import fr.reseaumexico.editor.factorValue.FactorValueEditorFactory; import jaxx.runtime.context.JAXXInitialContext; import jaxx.runtime.swing.ErrorDialogUI; import org.apache.commons.logging.Log; @@ -31,26 +33,36 @@ import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.DefaultI18nInitializer; +import java.io.File; + /** * @author sletellier <letellier@codelutin.com> * @since 0.1 */ public class RunMexicoEditorDemo { - /** - * Logger - */ + /** Logger */ private static Log log = LogFactory.getLog(RunMexicoEditorDemo.class); - public static void main(String[] args) { + public static void main(String... args) { try { I18n.init(new DefaultI18nInitializer("jmexico-editor-demo-i18n"), null); - JAXXInitialContext jaxxContext = new JAXXInitialContext(); - MexicoEditorDemoUIHandler mainHandler = new MexicoEditorDemoUIHandler(); - MexicoEditorDemoUI mainUI = mainHandler.initUI(jaxxContext); + JAXXInitialContext context = new JAXXInitialContext(); + context.add(new FactorValueEditorFactory()); + MexicoEditorDemoUI mainUI = new MexicoEditorDemoUI(context); + + mainUI.init(); + + if (args.length == 1) { + + // load input model + File file = new File(args[0]); + + mainUI.getHandler().loadInputFile(file); + } } catch (Exception eee) { log.error(eee.getMessage(), eee); ErrorDialogUI.showError(eee); Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2012-10-06 11:29:06 UTC (rev 79) +++ trunk/pom.xml 2012-10-06 14:56:19 UTC (rev 80) @@ -117,6 +117,12 @@ <dependency> <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-common</artifactId> + <version>${swingXVersion}</version> + </dependency> + + <dependency> + <groupId>org.swinglabs.swingx</groupId> <artifactId>swingx-core</artifactId> <version>${swingXVersion}</version> </dependency>
participants (1)
-
tchemit@users.forge.codelutin.com