Author: kmorin Date: 2013-02-15 20:16:17 +0100 (Fri, 15 Feb 2013) New Revision: 430 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/430 Log: resolves #2003 Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.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/content/operation/catches/ComputeWeightsAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.java 2013-02-15 18:55:19 UTC (rev 429) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/ComputeWeightsAction.java 2013-02-15 19:16:17 UTC (rev 430) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; +import java.awt.Component; import java.awt.event.ActionEvent; import java.util.List; import java.util.Map; @@ -54,6 +55,10 @@ private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(ComputeWeightsAction.class); + + protected String errorMessage; + protected String errorTitle; + protected Component errorComponent; protected enum Weights { UNSORTED, SAMPLE_SORTED, SORTED, TOTAL @@ -83,21 +88,32 @@ Float rejectedWeight = model.getCatchTotalRejectedWeight(); if (rejectedWeight == null && totalWeight != null) { - model.setCatchTotalRejectedComputedWeight(totalWeight - - speciesWeights.get(Weights.UNSORTED) - - speciesWeights.get(Weights.SORTED)); - + if (!totalWeight.equals(speciesWeights.get(Weights.UNSORTED) + + speciesWeights.get(Weights.SORTED))) { + errorMessage = _("tutti.action.computeWeights.error.incoherentTotal"); + errorTitle = _("tutti.action.computeWeights.error.incoherentTotal.title"); + errorComponent = ui.getCatchTotalWeightField(); + + } else { + + model.setCatchTotalRejectedComputedWeight(totalWeight + - speciesWeights.get(Weights.UNSORTED) + - speciesWeights.get(Weights.SORTED)); + } + } else if (totalWeight == null) { if (rejectedWeight == null) { rejectedWeight = 0f; } model.setCatchTotalComputedWeight(speciesWeights.get(Weights.UNSORTED) - + speciesWeights.get(Weights.SORTED)+ rejectedWeight); + + speciesWeights.get(Weights.SORTED)+ rejectedWeight); } else if (rejectedWeight != null && !totalWeight.equals(speciesWeights.get(Weights.UNSORTED) - + speciesWeights.get(Weights.SORTED)+ rejectedWeight)) { - // TODO handle error + + speciesWeights.get(Weights.SORTED) + rejectedWeight)) { + errorMessage = _("tutti.action.computeWeights.error.incoherentTotal"); + errorTitle = _("tutti.action.computeWeights.error.incoherentTotal.title"); + errorComponent = ui.getCatchTotalWeightField(); } } @@ -160,7 +176,10 @@ model.setSpeciesTotalSortedComputedWeight(totalSortedWeight); } else if (speciesTotalSortedWeight < totalSortedWeight) { - // TODO handle error + errorMessage = _("tutti.action.computeWeights.error.incoherentSpeciesTotalSorted"); + errorTitle = _("tutti.action.computeWeights.error.incoherentSpeciesTotalSorted.title"); + errorComponent = ui.getSpeciesTotalSortedWeightField(); + } else if (speciesTotalSortedWeight < 1.05 * totalSortedWeight) { // TODO Si le "Poids total VRAC" est saisi est que sa valeur // est supérieure de moins de x% (x en configuration) @@ -217,7 +236,9 @@ } } else if (categoryWeight < sum) { - // handle error + errorMessage = _("tutti.action.computeWeights.error.incoherentParentCategoryWeight"); + errorTitle = _("tutti.action.computeWeights.error.incoherentParentCategoryWeight.title"); + errorComponent = null; } else { boolean subSample = categoryWeight > sum; @@ -252,7 +273,9 @@ } if (categoryWeight == null && rowWeight != null) { - //TODO handle error + errorMessage = _("tutti.action.computeWeights.error.incoherentRowWeightCategory"); + errorTitle = _("tutti.action.computeWeights.error.incoherentRowWeightCategory.title"); + errorComponent = null; } else if (categoryWeight == null && frequencyWeight != null) { // if the category weight is null and the frequencies have a weight, @@ -266,13 +289,17 @@ // if the weight of the frequencies is different from the category // weight, then set the weight of the sample if (categoryWeight != null && frequencyWeight > categoryWeight) { - //TODO handle error + errorMessage = _("tutti.action.computeWeights.error.incoherentCategoryWeight"); + errorTitle = _("tutti.action.computeWeights.error.incoherentCategoryWeight.title"); + errorComponent = null; } else if (rowWeight == null) { row.setComputedWeight(frequencyWeight); } else if (!rowWeight.equals(frequencyWeight)) { - //TODO handle error + errorMessage = _("tutti.action.computeWeights.error.incoherentRowWeightFrequency"); + errorTitle = _("tutti.action.computeWeights.error.incoherentRowWeightFrequency.title"); + errorComponent = null; } result = categoryWeight; @@ -297,4 +324,21 @@ } textField.setText(textValue); } + + @Override + protected void releaseAction(ActionEvent event) { + if (errorMessage != null) { + JOptionPane.showMessageDialog( + getUI(), + errorMessage, + errorTitle, + JOptionPane.ERROR_MESSAGE); + } + if (errorComponent != null) { + errorComponent.requestFocus(); + } + errorMessage = null; + errorComponent = null; + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-02-15 18:55:19 UTC (rev 429) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-02-15 19:16:17 UTC (rev 430) @@ -28,6 +28,8 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -154,6 +156,33 @@ public EditCatchesUIModel() { super(CatchBatch.class, fromBeanBinder, toBeanBinder); + speciesTotalSortedComputedOrNotWeight.addPropertyChangeListener( + TuttiComputedOrNotData.PROPERTY_DATA, + new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + firePropertyChange(PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, + evt.getOldValue(), evt.getNewValue()); + } + }); + catchTotalComputedOrNotWeight.addPropertyChangeListener( + TuttiComputedOrNotData.PROPERTY_DATA, + new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + firePropertyChange(PROPERTY_CATCH_TOTAL_WEIGHT, + evt.getOldValue(), evt.getNewValue()); + } + }); + catchTotalRejectedComputedOrNotWeight.addPropertyChangeListener( + TuttiComputedOrNotData.PROPERTY_DATA, + new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + firePropertyChange(PROPERTY_CATCH_TOTAL_COMPUTED_WEIGHT, + evt.getOldValue(), evt.getNewValue()); + } + }); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-15 18:55:19 UTC (rev 429) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-02-15 19:16:17 UTC (rev 430) @@ -41,7 +41,6 @@ import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.ui.swing.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchTableUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; @@ -89,10 +88,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.swing.border.LineBorder; -import jaxx.runtime.swing.JAXXWidgetUtil; -import jaxx.runtime.swing.editor.cell.NumberCellEditor; -import org.apache.commons.lang.reflect.ConstructorUtils; import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; @@ -293,12 +288,9 @@ @Override protected void saveSelectedRowIfRequired(TuttiBeanMonitor<SpeciesBatchRowModel> rowMonitor, SpeciesBatchRowModel row) { -log.debug("saveSelectedRowIfRequired"); if (row.isValid()) { // there is a valid bean attached to the monitor -log.debug("isValid"); if (rowMonitor.wasModified()) { -log.debug("wasModified"); // monitored bean was modified, save it if (log.isInfoEnabled()) { @@ -315,7 +307,6 @@ rowMonitor.clearModified(); } } else { -log.debug("wasNotModified"); //FIXME See how to delete rows ? Or moreover how to save tehem... if (log.isWarnEnabled()) { 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-02-15 18:55:19 UTC (rev 429) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-02-15 19:16:17 UTC (rev 430) @@ -30,6 +30,18 @@ tutti.action.closeDb=Fermer tutti.action.closeDb.tip=Fermer la base de données en cours d'utilisation tutti.action.computeWeights=Elever les poids +tutti.action.computeWeights.error.incoherentCategoryWeight=Le poids total des mensurations est supérieur au poids de la catégorie +tutti.action.computeWeights.error.incoherentCategoryWeight.title=Incohérence +tutti.action.computeWeights.error.incoherentParentCategoryWeight=Le poids de la catégorie est différent de la somme des poids de ses sous-catégories +tutti.action.computeWeights.error.incoherentParentCategoryWeight.title=Incohérence +tutti.action.computeWeights.error.incoherentRowWeightCategory=Le poids de la catégorie ne peut pas être nul si le poids de sous-échantillonage est renseigné +tutti.action.computeWeights.error.incoherentRowWeightCategory.title=Incohérence +tutti.action.computeWeights.error.incoherentRowWeightFrequency=Le poids total des mensurations est différent du poids du sous-échantillon +tutti.action.computeWeights.error.incoherentRowWeightFrequency.title=Incohérence +tutti.action.computeWeights.error.incoherentSpeciesTotalSorted=Le poids total Vrac des espèces est inférieur à la somme des poids Vrac triés, inerte trié et vivant non détaillé trié +tutti.action.computeWeights.error.incoherentSpeciesTotalSorted.title=Incohérence +tutti.action.computeWeights.error.incoherentTotal=Le poids total de la capture ne correspond pas à la somme des poids totaux Vrac, Hors Vrac et non triés +tutti.action.computeWeights.error.incoherentTotal.title=Incohérence tutti.action.computeWeights.tip=Elever les poids tutti.action.configuration=Configuration tutti.action.configuration.tip=Configurer Tutti @@ -106,7 +118,6 @@ tutti.action.newProgram.tip=Créer une nouvelle série de campagne tutti.action.newProtocol=Nouveau tutti.action.newProtocol.tip=Créer un nouveau protocole -tutti.action.ok=Fermer tutti.action.openDb=Ouvrir tutti.action.openDb.tip=Ouvrir la base de données détectée par Tutti tutti.action.reload.actions=Recharger les actions @@ -159,7 +170,6 @@ tutti.dialog.askCancelEditBeforeLeaving.cancelEditFishingOperation=Le trait modifié n'est pas valide. Voulez-vous annuler les modifications ? tutti.dialog.askCancelEditBeforeLeaving.title=Modifications non enregistrées mais invalides tutti.dialog.askSaveBeforeLeaving.createFishingOperation=Le trait n'a pas été créé. Voulez-vous l'enregistrer ? -tutti.dialog.askSaveBeforeLeaving.message=Vous avez fait des modifications que vous n'avez pas enregistrées. Voulez-vous les enregistrer ? tutti.dialog.askSaveBeforeLeaving.saveCatchBatch=La capture a été modifiée. Voulez-vous enregistrer les modifications ? tutti.dialog.askSaveBeforeLeaving.saveCruise=La campagne a été modifiée. Voulez-vous enregistrer les modifications ? tutti.dialog.askSaveBeforeLeaving.saveFishingOperation=Le trait a été modifié. Voulez-vous enregistrer les modifications ? @@ -182,8 +192,6 @@ tutti.flash.information.species.imported.in.protocol=Espèces importées dans le protocole depuis le fichier %s. tutti.flash.information.species.remove.from.protocol=L'espèce %s a été retirée du protocole tutti.information.db.loaded=Tutti est connecté à une base de données -tutti.information.no.db.connected=Aucune base de données connectée à Tutti. -tutti.information.no.db.exist=Tutti n'a pas trouvée de base à utiliser, vous pouvez l'installer. tutti.information.no.db.loaded=Tutti a détecté une base mais elle n'est pas actuellement ouverte. tutti.label.attachmentEditor.file=Fichier tutti.label.attachmentEditor.fileComment=Commentaire @@ -194,8 +202,6 @@ tutti.label.catches.benthosTotalWeight=Poids TOTAL (kg) tutti.label.catches.catchThalassa=(*) uniquement sur Thalassa tutti.label.catches.catchTotalRejectedWeight=Poids total NON TRIÉ (kg) -tutti.label.catches.catchTotalSortedCarousselWeight=Caroussel Observé (*) -tutti.label.catches.catchTotalSortedTremisWeight=Tremie (*) tutti.label.catches.catchTotalSortedWeight=Poids total VRAC (kg) tutti.label.catches.catchTotalUnsortedWeight=Poids total HORS VRAC (kg) tutti.label.catches.catchTotalWeight=Poids TOTAL (kg) @@ -327,8 +333,6 @@ tutti.menu.file.tip=Fichier tutti.menu.help=Aide tutti.menu.help.tip=Aide -tutti.menu.referential=Référentiels -tutti.menu.referential.tip=Gestion des référentiels tutti.menu.synchronisationAllegro=Allégro tutti.menu.synchronisationAllegro.tip=Synchronisation Allégro tutti.menu.synchronisationExport=Export