Author: kmorin Date: 2013-01-24 16:34:52 +0100 (Thu, 24 Jan 2013) New Revision: 244 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/244 Log: enable to add a species which is not in the protocol Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiAction.java 2013-01-24 15:34:52 UTC (rev 244) @@ -189,7 +189,7 @@ JLabel label = new JLabel(); EmptyBorder border = new EmptyBorder(5, 5, 5, 5); label.setBorder(border); - label.setText(_("tutti.message.action.running", actionName)); + label.setText(_("tutti.message.action.running", actionDescription)); panel.add(label, BorderLayout.CENTER); JProgressBar progressBar = new JProgressBar(); progressBar.setBorder(border); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesAction.java 2013-01-24 15:34:52 UTC (rev 244) @@ -0,0 +1,88 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.split; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; +import java.util.concurrent.Executors; +import javax.swing.SwingUtilities; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import static org.nuiton.i18n.I18n._; +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class AddSpeciesAction extends AbstractTuttiAction<CreateSpeciesBatchUIModel, CreateSpeciesBatchUIHandler> { + + private static final long serialVersionUID = 1L; + + /** Logger. */ + private static final Log log = LogFactory.getLog(AddSpeciesAction.class); + + protected AddSpeciesUI popup; + + protected List<Species> allSpecies; + + public AddSpeciesAction(CreateSpeciesBatchUIHandler handler) { + super(handler, + "addSpecies", + "add", + null, + _("tutti.action.addSpecies.tip"), + false + ); + + popup = new AddSpeciesUI(getHandler().getUi()); + popup.getValidateButton().addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + getHandler().closeDialog(popup); + } + }); + + TuttiPersistence persistenceService = getContext().getService(PersistenceService.class); + allSpecies = persistenceService.getAllSpecies(); + } + + @Override + protected void doAction(ActionEvent event) { + CreateSpeciesBatchUIHandler handler = getHandler(); + AddSpeciesUIModel model = popup.getModel(); + model.setSelectedSpecies(null); + + List<Species> availableSpecies = handler.getModel().getAvailableSpecies(); + List<Species> species = Lists.newArrayList(allSpecies); + species.removeAll(availableSpecies); + model.setSpecies(species); + + // open the popup asynchronously because the setVisible(true) method returns + // only after setVisible(false) has been called and this prevents the loading to hide. + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + getHandler().openDialog(popup, _("tutti.title.createBatch")); + + Species species = popup.getModel().getSelectedSpecies(); + if (species != null) { + CreateSpeciesBatchUIHandler handler = getHandler(); + CreateSpeciesBatchUIModel model = handler.getModel(); + + List<Species> availableSpecies = Lists.newArrayList(model.getAvailableSpecies()); + availableSpecies.add(species); + model.setAvailableSpecies(availableSpecies); + model.setSpecies(species); + } + } + }); + } + +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.css 2013-01-24 15:34:52 UTC (rev 244) @@ -0,0 +1,8 @@ +#speciesCombo { + showReset: true; + i18nPrefix: "tutti.property."; + bean: {model}; + property: selectedSpecies; + selectedItem: {model.getSelectedSpecies()}; + data: {model.getSpecies()}; +} \ No newline at end of file Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUI.jaxx 2013-01-24 15:34:52 UTC (rev 244) @@ -0,0 +1,37 @@ +<JPanel layout='{new BorderLayout()}' id='addSpeciesPopup' + implements='fr.ifremer.tutti.ui.swing.TuttiUI<AddSpeciesUIModel, AddSpeciesUIHandler>'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Species + jaxx.runtime.swing.editor.bean.BeanComboBox + </import> + + <script><![CDATA[ + +public AddSpeciesUI(CreateSpeciesBatchUI parentUI) { + JAXXUtil.initContext(this, parentUI); + AddSpeciesUIHandler handler = new AddSpeciesUIHandler(parentUI, this); + setContextValue(handler); + handler.beforeInitUI(); +} + +protected void $afterCompleteSetup() { handler.afterInitUI(); } + ]]></script> + + <AddSpeciesUIHandler id='handler' + initializer='getContextValue(AddSpeciesUIHandler.class)' /> + + <AddSpeciesUIModel id='model' + initializer='getContextValue(AddSpeciesUIModel.class)'/> + + <BeanComboBox id='speciesCombo' constraints='BorderLayout.CENTER' + constructorParams='this' genericType='Species' /> + + <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> + <JButton id='cancelButton' text='tutti.action.cancel' + onActionPerformed='model.setSelectedSpecies(null); handler.closeDialog(this)'/> + <JButton id='validateButton' text='tutti.action.validate' + onActionPerformed='handler.closeDialog(this)'/> + </JPanel> + +</JPanel> \ No newline at end of file Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) @@ -0,0 +1,60 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.split; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.TuttiUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; +import javax.swing.JDialog; +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class AddSpeciesUIHandler extends AbstractTuttiUIHandler<AddSpeciesUIModel> { + + private static final Log log = LogFactory.getLog(AddSpeciesUIHandler.class); + + protected AddSpeciesUI ui; + + public AddSpeciesUIHandler(CreateSpeciesBatchUI parentUI, AddSpeciesUI ui) { + super(parentUI.getHandler().getContext()); + this.ui = ui; + } + + @Override + public void beforeInitUI() { + AddSpeciesUIModel model = new AddSpeciesUIModel(); + ui.setContextValue(model); + } + + @Override + public void afterInitUI() { + initUI(ui); + + initBeanComboBox(ui.getSpeciesCombo(), + Lists.<Species>newArrayList(), + null); + } + + @Override + public void onCloseUI() { + } + + @Override + public AddSpeciesUIModel getModel() { + return ui.getModel(); + } + +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/AddSpeciesUIModel.java 2013-01-24 15:34:52 UTC (rev 244) @@ -0,0 +1,47 @@ + +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.split; + +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; +import java.util.List; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class AddSpeciesUIModel extends AbstractTuttiBeanUIModel<AddSpeciesUIModel, AddSpeciesUIModel> { + + public static final String PROPERTY_SPECIES = "species"; + + public static final String PROPERTY_SELECTED_SPECIES = "selectedSpecies"; + + protected List<Species> species = Lists.newArrayList(); + + protected Species selectedSpecies; + + public AddSpeciesUIModel() { + super(AddSpeciesUIModel.class, null, null); + } + + public List<Species> getSpecies() { + return species; + } + + public void setSpecies(List<Species> species) { + Object oldValue = getSpecies(); + this.species = Lists.newArrayList(species); + firePropertyChange(PROPERTY_SPECIES, oldValue, this.species); + } + + public Species getSelectedSpecies() { + return selectedSpecies; + } + + public void setSelectedSpecies(Species selectedSpecies) { + Object oldValue = getSelectedSpecies(); + this.selectedSpecies = selectedSpecies; + firePropertyChange(PROPERTY_SELECTED_SPECIES, oldValue, selectedSpecies); + } + +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css 2013-01-24 15:34:52 UTC (rev 244) @@ -52,6 +52,10 @@ data: {model.getAvailableSpecies()}; } +#addSpeciesButton { + action: {addSpeciesAction}; +} + #sortedUnsortedCategoryLabel { text: "tutti.label.createSpeciesBatch.sortedUnsortedCategory"; labelFor: {sortedUnsortedCategoryComboBox}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx 2013-01-24 15:34:52 UTC (rev 244) @@ -68,6 +68,8 @@ <CreateSpeciesBatchUIModel id='model' initializer='getContextValue(CreateSpeciesBatchUIModel.class)'/> + <AddSpeciesAction id='addSpeciesAction' constructorParams='handler'/> + <SwingValidatorMessageTableModel id='errorTableModel'/> <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' @@ -91,6 +93,9 @@ <BeanComboBox id='speciesComboBox' constructorParams='this' genericType='Species'/> </cell> + <cell> + <JButton id='addSpeciesButton'/> + </cell> </row> <!-- Sorted / Unsorted Category --> @@ -98,7 +103,7 @@ <cell anchor='west'> <JLabel id='sortedUnsortedCategoryLabel'/> </cell> - <cell weightx='1.0'> + <cell weightx='1.0' columns='2'> <BeanComboBox id='sortedUnsortedCategoryComboBox' constructorParams='this' genericType='CaracteristicQualitativeValue'/> @@ -110,14 +115,14 @@ <cell anchor='west'> <JLabel id='batchWeightLabel'/> </cell> - <cell weightx='1.0'> + <cell weightx='1.0' columns='2'> <NumberEditor id='batchWeightField' constructorParams='this'/> </cell> </row> <!-- Form Actions --> <row> - <cell columns='2'> + <cell columns='3'> <JPanel layout='{new GridLayout(1, 0)}'> <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> <JButton id='saveButton' onActionPerformed='handler.save()'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-01-24 15:34:52 UTC (rev 244) @@ -32,9 +32,11 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel; import fr.ifremer.tutti.ui.swing.util.Cancelable; +import java.awt.Dimension; import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer; import jaxx.runtime.validator.swing.SwingValidatorUtil; import org.apache.commons.logging.Log; @@ -194,6 +196,10 @@ closeDialog(ui); } + public void openDialog(TuttiUI dialogContent, String title) { + openDialog(ui, dialogContent, title, ui.getPreferredSize()); + } + //------------------------------------------------------------------------// //-- Public methods --// //------------------------------------------------------------------------// @@ -226,7 +232,7 @@ speciesToUse.addAll(allSpecies); } - ui.getSpeciesComboBox().setData(speciesToUse); + model.setAvailableSpecies(speciesToUse); } public void save() { @@ -238,4 +244,9 @@ // close dialog closeDialog(ui); } + + public CreateSpeciesBatchUI getUi() { + return ui; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIModel.java 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIModel.java 2013-01-24 15:34:52 UTC (rev 244) @@ -31,6 +31,8 @@ import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * Model of {@link CreateSpeciesBatchUI}. @@ -40,6 +42,8 @@ */ public class CreateSpeciesBatchUIModel extends AbstractTuttiBeanUIModel<CreateSpeciesBatchUIModel, CreateSpeciesBatchUIModel> { + private final static Log log = LogFactory.getLog(CreateSpeciesBatchUIModel.class); + private static final long serialVersionUID = 1L; public static final String PROPERTY_AVAILABLE_SPECIES = "availableSpecies"; @@ -90,10 +94,13 @@ } public List<Species> getAvailableSpecies() { + log.info("getAvailableSpecies " + availableSpecies); return availableSpecies; } public void setAvailableSpecies(List<Species> availableSpecies) { + + log.info("setAvailableSpecies " + availableSpecies); Object oldValue = getAvailableSpecies(); this.availableSpecies = availableSpecies; firePropertyChange(PROPERTY_AVAILABLE_SPECIES, oldValue, availableSpecies); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2013-01-24 15:34:52 UTC (rev 244) @@ -307,7 +307,7 @@ String duration = ""; if (startDate != null && endDate != null) { duration = DurationFormatUtils.formatPeriod( - startDate.getTime(), endDate.getTime() + 60000, _(format)); + startDate.getTime(), endDate.getTime(), _(format)); } return duration; } Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-23 15:58:55 UTC (rev 243) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-24 15:34:52 UTC (rev 244) @@ -2,6 +2,7 @@ tutti.about.message=<h3>Tutti</h3><p><strong>Outil de saisie de données d'opérations et de captures au cours des campagnes halieutiques.</strong></p><br/><p>Ce logiciel permettra la saisie en mer des données d'opération de pêche (positions, environnement, engin, etc) et des captures associées (composition de la capture en espèces scientifiques avec poids, nombres, tailles etc) pour l'ensemble des campagnes halieutiques réalisées par l'Ifremer.</p><p>Ce projet a été initiée en 2012 par l'<a href\="http\://www.ifremer.fr">Ifremer</a> et réalisé par la société <a href\="http\://codelutin.com">Codelutin</a>.</p><hr/><br/><p>Pour plus d'informations, vous pouvez visiter le <a href\="http\://maven-site.forge.codelutin.com/tutti">site du projet</a>.</p><p>Projet hébergé sur la forge <a href\="http\://forge.codelutin.com/projects/tutti">Forge.codelutin.com</a>.</p> tutti.action.about=À propos tutti.action.about.tip=À Propos +tutti.action.addSpecies.tip=Ajouter une espèce tutti.action.cancel=Annuler tutti.action.cancel.editCruise=Annuler tutti.action.cancel.editCruise.tip=Annuler l'édition (ou la création) de la campagne @@ -73,6 +74,7 @@ tutti.action.site.tip=Accéder au site du projet Tutti tutti.action.splitSpeciesBatch=Catégoriser le lot tutti.action.splitSpeciesBatch.tip=Catégoriser le lot courant (celui de la ligne sélectionné) +tutti.action.validate=Valider tutti.action.validateCatches=Valider les captures tutti.action.validateCatches.tip=Valider les captures tutti.application.config=Configuration de l'application Tutti