This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 2e5ab370389abf6ced274727f04845dc94ea9f34 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:31:22 2016 +0100 vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 8 ++++ .../fr/ifremer/tutti/TuttiConfigurationOption.java | 18 ++++++++- .../i18n/tutti-persistence_en_GB.properties | 2 + .../i18n/tutti-persistence_fr_FR.properties | 2 + .../swing/content/config/TuttiConfigUIHandler.java | 6 +++ .../frequency/SpeciesFrequencyRowModel.java | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 46 ++++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 + 9 files changed, 86 insertions(+), 1 deletion(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 8c0c8e2..c0377c8 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -581,6 +581,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE.getKey()); } + public Float getDifferenceRateBetweenWeightAndRtpWeight() { + return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.RTP_WEIGHTS_DIFFERENCE_RATE.getKey()); + } + public boolean getPupitriImportMissingBatches() { return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES.getKey()); } @@ -649,6 +653,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_SELECTED_ROW.getKey()); } + public Color getColorWarningRow() { + return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_WARNING_ROW.getKey()); + } + public Color getColorCatch() { return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_CATCH.getKey()); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index a676686..3560e9a 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -264,7 +264,7 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { "tutti.genericFormat.import.maximumRowsInErrorPerFile", n("tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description"), "100", - int.class, + Integer.class, false), IMPORT_DB_SKIP_BACKUP( @@ -408,6 +408,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { false ), + RTP_WEIGHTS_DIFFERENCE_RATE( + "tutti.db.weights.rate.difference.rtp", + n("tutti.config.option.weights.rate.difference.rtp.description"), + "20.0", + Float.class, + false + ), + PROGRAM_ID( "tutti.programId", n("tutti.config.option.programId.description"), @@ -496,6 +504,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { false ), + COLOR_WARNING_ROW( + "tutti.ui.color.warningRow", + n("tutti.config.option.ui.color.warningRow.description"), + new Color(245, 218, 88).toString(), + Color.class, + false + ), + COLOR_CATCH( "tutti.ui.color.catch", n("tutti.config.option.ui.color.catch.description"), diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 115e3f1..19a4bf5 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -81,6 +81,7 @@ tutti.config.option.ui.color.rowToConfirm.description= tutti.config.option.ui.color.selectedRow.description= tutti.config.option.ui.color.species.description= tutti.config.option.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning.description= +tutti.config.option.ui.color.warningRow.description= tutti.config.option.ui.config.file.description= tutti.config.option.ui.coordinateEditorType.description= tutti.config.option.ui.dateFormat.description= @@ -95,6 +96,7 @@ tutti.config.option.weight.unit.benthos.description= tutti.config.option.weight.unit.individualObservation.description= tutti.config.option.weight.unit.marineLitter.description= tutti.config.option.weight.unit.species.description= +tutti.config.option.weights.rate.difference.rtp.description= tutti.config.option.weights.rate.difference.totalAndSorted.description= tutti.config.parse.error= tutti.config.save.error= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index e40ee0e..4f77f48 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -74,6 +74,7 @@ tutti.config.option.ui.color.rowToConfirm.description=Ligne à confirmer tutti.config.option.ui.color.selectedRow.description=Couleur de fond d'une ligne sélectionnée dans un tableau tutti.config.option.ui.color.species.description=Couleur pour représenter les espèces dans l'écran de résumé des captures tutti.config.option.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning.description=Couleur pour représenter les espèces (ou benthos) observées en erreur dans l'écran de résumé des captures +tutti.config.option.ui.color.warningRow.description=Couleur de fond d'une ligne qui est en warning tutti.config.option.ui.config.file.description=Chemin du fichier de configuration des interfaces graphiques tutti.config.option.ui.coordinateEditorType.description=Type de l'éditeur de coordonnées tutti.config.option.ui.dateFormat.description=Format de dates @@ -88,6 +89,7 @@ tutti.config.option.weight.unit.benthos.description=Unité de poids à utiliser tutti.config.option.weight.unit.individualObservation.description=Unité de poids à utiliser dans la saisies des données individuelles tutti.config.option.weight.unit.marineLitter.description=Unité de poids à utiliser dans la saisies des macro-déchêts tutti.config.option.weight.unit.species.description=Unité de poids à utiliser dans la saisies des espèces +tutti.config.option.weights.rate.difference.rtp.description=Pourcentage de différence entre le poids saisi et le poids calculé par la relation taille/poids tutti.config.option.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie tutti.config.parse.error=Erreur de parsing du fichier de configuration tutti.config.save.error=Erreur lors de la sauvegarde de la configuration dans le fichier %s diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 28d20d4..52b391f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -131,6 +131,9 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE) .setOptionShortLabel(t("tutti.config.option.weights.rate.difference.totalAndSorted.shortLabel")) + .addOption(TuttiConfigurationOption.RTP_WEIGHTS_DIFFERENCE_RATE) + .setOptionShortLabel(t("tutti.config.option.weights.rate.difference.rtp.shortLabel")) + .addOption(TuttiConfigurationOption.MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE) .setOptionShortLabel(t("tutti.config.option.ui.individualObservationRowsToCreate.shortLabel")) @@ -194,6 +197,9 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.COLOR_ROW_TO_CONFIRM) .setOptionShortLabel(t("tutti.config.option.ui.color.rowToConfirm.shortLabel")) + .addOption(TuttiConfigurationOption.COLOR_WARNING_ROW) + .setOptionShortLabel(t("tutti.config.option.ui.color.rowInWarning.shortLabel")) + .addOption(TuttiConfigurationOption.COLOR_COMPUTED_WEIGHTS) .setOptionShortLabel(t("tutti.config.option.ui.color.computedWeights.shortLabel")) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index c2e8db0..3686510 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -76,6 +76,7 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa * @since 4.5 */ protected ComputableData<Float> computedOrNotWeight = new ComputableData<>(); + /** * Length step caracteristic. * diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index cb64e63..bbe40c6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -69,6 +69,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.ComponentAdapter; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; @@ -90,6 +91,7 @@ import javax.swing.SwingUtilities; import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -696,6 +698,50 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci installTableKeyListener(columnModel, table); } + @Override + protected void addHighlighters(final JXTable table) { + + super.addHighlighters(table); + + HighlightPredicate notSelectedPredicate = new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.IS_SELECTED); + HighlightPredicate weightTooDifferentFromRtpPredicate = (Component renderer, ComponentAdapter adapter) -> { + + boolean result = false; + if (table.getModel() instanceof SpeciesFrequencyTableModel && getModel().isUseRTP()) { + + SpeciesFrequencyTableModel tableModel = (SpeciesFrequencyTableModel) table.getModel(); + int viewRow = adapter.row; + int modelRow = adapter.convertRowIndexToModel(viewRow); + SpeciesFrequencyRowModel row = tableModel.getEntry(modelRow); + + Float weight = row.getWeight(); + Float rate = getConfig().getDifferenceRateBetweenWeightAndRtpWeight(); + result = weight != null && Math.abs(weight - row.getComputedWeight()) >= weight * rate / 100; + } + + return result; + }; + + // paint in a special color rows with weight in warning (not selected) + Highlighter weightTooDifferentFromRtpHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.EDITABLE, + notSelectedPredicate, + weightTooDifferentFromRtpPredicate), + getConfig().getColorWarningRow()); + table.addHighlighter(weightTooDifferentFromRtpHighlighter); + + // paint in a special color rows with weight in warning (selected) + Highlighter weightTooDifferentFromRtpSelectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.EDITABLE, + HighlightPredicate.IS_SELECTED, + weightTooDifferentFromRtpPredicate), + getConfig().getColorWarningRow().darker()); + table.addHighlighter(weightTooDifferentFromRtpSelectedHighlighter); + + } + protected void initHistogram(SpeciesFrequencyUI ui, SpeciesFrequencyUIModel model) { chart = ChartFactory.createXYBarChart(null, t("tutti.editSpeciesFrequencies.table.header.lengthStep"), diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 30ccd44..2374238 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -172,6 +172,7 @@ tutti.config.option.ui.color.computedWeights.shortLabel= tutti.config.option.ui.color.hightlightInfo.background.shortLabel= tutti.config.option.ui.color.hightlightInfo.foreground.shortLabel= tutti.config.option.ui.color.marineLitter.shortLabel= +tutti.config.option.ui.color.rowInWarning.shortLabel= tutti.config.option.ui.color.rowInvalid.shortLabel= tutti.config.option.ui.color.rowReadOnly.shortLabel= tutti.config.option.ui.color.rowToConfirm.shortLabel= @@ -202,6 +203,7 @@ tutti.config.option.weight.unit.benthos.shortLabel= tutti.config.option.weight.unit.individualObservation.shortLabel= tutti.config.option.weight.unit.marineLitter.shortLabel= tutti.config.option.weight.unit.species.shortLabel= +tutti.config.option.weights.rate.difference.rtp.shortLabel= tutti.config.option.weights.rate.difference.totalAndSorted.shortLabel= tutti.config.title= tutti.context.helpPage.notFound= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 42cd7ac..6656bb9 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -146,6 +146,7 @@ tutti.config.option.ui.color.computedWeights.shortLabel=Couleur de valeur calcul tutti.config.option.ui.color.hightlightInfo.background.shortLabel=Couleur du fond des libellés mis en avant (Écran Capture > Création d'un lot) tutti.config.option.ui.color.hightlightInfo.foreground.shortLabel=Couleur du texte des libellés mis en avant (Écran Capture > Création d'un lot) tutti.config.option.ui.color.marineLitter.shortLabel=Couleur des libellés de macro-déchets (Écran Capture > Résumé) +tutti.config.option.ui.color.rowInWarning.shortLabel=Couleur de lignes avec un warning tutti.config.option.ui.color.rowInvalid.shortLabel=Couleur d'une ligne invalide tutti.config.option.ui.color.rowReadOnly.shortLabel=Couleur d'une cellule en lecture seule tutti.config.option.ui.color.rowToConfirm.shortLabel=Couleur d'une espèce à confirmer @@ -176,6 +177,7 @@ tutti.config.option.weight.unit.benthos.shortLabel=Unité Benthos tutti.config.option.weight.unit.individualObservation.shortLabel=Unité données individuelles tutti.config.option.weight.unit.marineLitter.shortLabel=Unité Macro-déchêts tutti.config.option.weight.unit.species.shortLabel=Unité Espèces +tutti.config.option.weights.rate.difference.rtp.shortLabel=Pourcentage de différence entre le poids saisi et le poids calculé par la RTP tutti.config.option.weights.rate.difference.totalAndSorted.shortLabel=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC tutti.config.title=Configuration tutti.context.helpPage.notFound=La page d'aide %s n'a pas été trouvée -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.