branch feature/ecran_obs_individuelles updated (df1825b -> 47891d3)
This is an automated email from the git hooks/post-receive script. New change to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git from df1825b - suppression de l'onglet observations individuelles dans la capture - ajout des lignes dans la table d'obs individuelles dans les mensurations (refs #8019) new 02b0ee4 affichage de l'histogramme dans une popup (refs #8019) new 6c3ee17 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) new 2e5ab37 vérification que le poids saisi est proche du poids calculé avec la RTP (refs #8019) new 47891d3 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 47891d347497825fc33c7c52ef004093e471a2b3 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:53:22 2016 +0100 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) 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) commit 6c3ee17741a731c00f068fa350e6d85b04d22471 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 17:43:35 2016 +0100 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) commit 02b0ee4f4dc41942b28bfbff8c9d01b3dac8517f Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 14:24:41 2016 +0100 affichage de l'histogramme dans une popup (refs #8019) Summary of changes: .../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 | 33 ++++- .../frequency/SpeciesFrequencyTableModel.java | 5 +- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 161 +++++++++++++++++++-- .../species/frequency/SpeciesFrequencyUIModel.java | 46 ++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 + 12 files changed, 265 insertions(+), 21 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 02b0ee4f4dc41942b28bfbff8c9d01b3dac8517f Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 14:24:41 2016 +0100 affichage de l'histogramme dans une popup (refs #8019) --- .../species/frequency/SpeciesFrequencyUIHandler.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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 51ef527..ed119da 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 @@ -77,6 +77,7 @@ import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationBusinessException; import javax.swing.JComponent; +import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; @@ -84,6 +85,8 @@ import javax.swing.SwingUtilities; import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; @@ -656,6 +659,23 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci JPanel histogramPanel = ui.getHistogramPanel(); histogramPanel.add(chartPanel, BorderLayout.CENTER); + + chartPanel.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + if (e.getClickCount() > 1) { + + ChartPanel chartPanel = new ChartPanel(chart); + JFrame chartPopup = new JFrame(); + chartPopup.add(chartPanel); + chartPopup.pack(); + chartPopup.setVisible(true); + + } + } + }); } protected void initLogTable(SpeciesFrequencyUI ui) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 6c3ee17741a731c00f068fa350e6d85b04d22471 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 17:43:35 2016 +0100 utilisation des rtp pour calculer les poids des lignes de mensuration (refs #8019) --- .../frequency/SpeciesFrequencyRowModel.java | 34 ++++++-- .../frequency/SpeciesFrequencyTableModel.java | 5 +- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 91 ++++++++++++++++++---- .../species/frequency/SpeciesFrequencyUIModel.java | 46 +++++++++++ 5 files changed, 156 insertions(+), 21 deletions(-) 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 be1e33a..c2e8db0 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 @@ -30,6 +30,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequencys; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -51,6 +52,8 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa public static final String PROPERTY_WEIGHT = "weight"; + public static final String PROPERTY_COMPUTED_WEIGHT = "computedOrNotWeight"; + public static final String PROPERTY_LENGHT_STEP_CARACTERISTIC = "lengthStepCaracteristic"; /** @@ -70,10 +73,9 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa /** * Weight of fishes observed. * - * @since 0.2 + * @since 4.5 */ - protected Float weight; - + protected ComputableData<Float> computedOrNotWeight = new ComputableData<>(); /** * Length step caracteristic. * @@ -130,6 +132,8 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa public SpeciesFrequencyRowModel(WeightUnit weightUnit) { super(fromBeanBinder, toBeanBinder); this.weightUnit = weightUnit; + computedOrNotWeight.addPropagateListener(PROPERTY_WEIGHT, this); + computedOrNotWeight.addPropagateListener(PROPERTY_COMPUTED_WEIGHT, this); } //------------------------------------------------------------------------// @@ -188,16 +192,34 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa @Override public Float getWeight() { - return weight; + return computedOrNotWeight.getData(); } @Override public void setWeight(Float weight) { Object oldValue = getWeight(); - this.weight = weight; + computedOrNotWeight.setData(weight); firePropertyChange(PROPERTY_WEIGHT, oldValue, weight); } + public Float getComputedWeight() { + return computedOrNotWeight.getComputedData(); + } + + public void setComputedWeight(Float weight) { + Object oldValue = getComputedWeight(); + computedOrNotWeight.setComputedData(weight); + firePropertyChange(PROPERTY_COMPUTED_WEIGHT, oldValue, weight); + } + + public ComputableData<Float> getComputedOrNotWeight() { + return computedOrNotWeight; + } + + public void setComputedOrNotWeight(ComputableData<Float> computedOrNotWeight) { + this.computedOrNotWeight = computedOrNotWeight; + } + @Override public Caracteristic getLengthStepCaracteristic() { return lengthStepCaracteristic; @@ -235,7 +257,7 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa } public boolean isEmpty() { - return lengthStep == null && (weight == null || number == null); + return lengthStep == null && (computedOrNotWeight.getData() == null || number == null); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 8eea8ef..99a8445 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -56,7 +56,7 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp n("tutti.editSpeciesFrequencies.table.header.number")); public static final ColumnIdentifier<SpeciesFrequencyRowModel> WEIGHT = ColumnIdentifier.newId( - SpeciesFrequencyRowModel.PROPERTY_WEIGHT, + SpeciesFrequencyRowModel.PROPERTY_COMPUTED_WEIGHT, n("tutti.editSpeciesFrequencies.table.header.weight"), n("tutti.editSpeciesFrequencies.table.header.weight")); @@ -308,6 +308,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp uiModel.recomputeRowValidState(row); uiModel.updateEmptyRow(row); + // recompute the weight with the rtp + uiModel.computeRowWeightWithRtp(row); + // Can recompute total number and weight only after valid flag change uiModel.recomputeTotalNumberAndWeight(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss index b7d9a39..9bb4ad2 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss @@ -262,6 +262,7 @@ ComputableDataEditor { #useRTPCheckBox { text: "tutti.editSpeciesFrequencies.field.useRtp"; toolTipText: "tutti.editSpeciesFrequencies.field.useRtp.tip"; + enabled: { getModel().getRtp() != null }; _help: {"tutti.editSpeciesFrequencies.field.useRtp.help"}; } 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 ed119da..cb64e63 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 @@ -24,12 +24,16 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderEvent; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderListener; import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.Rtp; +import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -56,6 +60,7 @@ import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; +import fr.ifremer.tutti.ui.swing.util.computable.ComputableDataTableCell; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; @@ -82,7 +87,9 @@ import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; +import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -93,6 +100,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -114,6 +122,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private JFreeChart chart; + protected Caracteristic sexCaracteristic; + /** * Weight unit. * @@ -236,7 +246,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public void beforeInit(SpeciesFrequencyUI ui) { super.beforeInit(ui); + this.weightUnit = getConfig().getSpeciesWeightUnit(); + sexCaracteristic = getPersistenceService().getSexCaracteristic(); SampleCategoryModel sampleCategoryModel = getDataContext().getSampleCategoryModel(); @@ -384,6 +396,11 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } }); + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_USE_RTP, evt -> { + getModel().getRows().forEach(row -> getModel().computeRowWeightWithRtp(row)); + getTableModel().fireTableDataChanged(); + }); + // set the pattern to the weight in simple counting mode according to the weight unit ui.getSimpleCountingWeightField().setNumberPattern(weightUnit.getNumberEditorPattern()); @@ -442,6 +459,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public void editBatch(FrequencyCellEditor editor) { + FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; + FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; + SpeciesBatchRowModel speciesBatch = editor.getEditRow(); SpeciesFrequencyUIModel model = getModel(); @@ -452,6 +472,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setSimpleCount(null); model.setMinStep(null); model.setMaxStep(null); + model.setRtp(null); frequencyEditor = editor; @@ -462,8 +483,46 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (speciesBatch != null) { + Species species = speciesBatch.getSpecies(); + model.setTotalWeight(speciesBatch.getWeight()); + // set rtps + + TuttiProtocol protocol = getDataContext().getProtocol(); + if (protocol != null) { + + Integer referenceTaxonId = species.getReferenceTaxonId(); + Optional<SpeciesProtocol> optSpeciesProtocol = + protocol.getSpecies().stream() + .filter(sp -> sp.getSpeciesReferenceTaxonId().equals(referenceTaxonId)) + .findFirst(); + + if (optSpeciesProtocol.isPresent()) { + SpeciesProtocol speciesProtocol = optSpeciesProtocol.get(); + Rtp rtp; + QualitativeValueId sex = + (QualitativeValueId) speciesBatch.getSampleCategoryValue(sexCaracteristic.getIdAsInt()); + if (sex != null) { + + switch (sex) { + case SEX_MALE: + rtp = speciesProtocol.getRtpMale(); + break; + case SEX_FEMALE: + rtp = speciesProtocol.getRtpFemale(); + break; + default: + rtp = speciesProtocol.getRtpUndefined(); + } + + } else { + rtp = speciesProtocol.getRtpUndefined(); + } + model.setRtp(rtp); + } + } + List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); // try to load existing frequency @@ -520,8 +579,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (lengthStepCaracteristic == null) { - Species species = speciesBatch.getSpecies(); - String lengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); if (lengthStepPmfmId != null) { @@ -546,20 +603,19 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci listenItchtyometer(); } + + if (lengthStepCaracteristic == null) { + String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(species); + if (speciesLengthStepPmfmId == null) { + mode = FrequencyConfigurationMode.SIMPLE_COUNTING; + } + } } if (log.isDebugEnabled()) { log.debug("Will edit batch row: " + speciesBatch + " with " + rows.size() + " frequency"); } - FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; - FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; - if (lengthStepCaracteristic == null) { - String speciesLengthStepPmfmId = taxonCache.getLengthStepPmfmId(speciesBatch.getSpecies()); - if (speciesLengthStepPmfmId == null) { - mode = FrequencyConfigurationMode.SIMPLE_COUNTING; - } - } Integer number = speciesBatch.getNumber(); if (number != null && rows.isEmpty()) { mode = FrequencyConfigurationMode.SIMPLE_COUNTING; @@ -616,10 +672,17 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci { // Weight - addFloatColumnToModel(columnModel, - SpeciesFrequencyTableModel.WEIGHT, - weightUnit, - table); + Color computedDataColor = getConfig().getColorComputedWeights(); + // create table column model + TableCellRenderer defaultRenderer = table.getDefaultRenderer(Object.class); + + addColumnToModel(columnModel, + ComputableDataTableCell.newEditor( + Float.class, weightUnit, computedDataColor), + ComputableDataTableCell.newRender( + defaultRenderer, weightUnit, computedDataColor), + SpeciesFrequencyTableModel.WEIGHT, + weightUnit); } // create table model diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 3a1d5da..d8ad4af 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; @@ -92,6 +93,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_USE_RTP = "useRTP"; + public static final String PROPERTY_RTP = "rtp"; + public static final String PROPERTY_EMPTY_ROWS = "emptyRows"; public static final String PROPERTY_NEXT_EDITABLE_ROW_INDEX = "nextEditableRowIndex"; @@ -164,6 +167,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected ComputableData<Float> totalComputedOrNotWeight = new ComputableData<Float>(); /** + * Rtp of the species batch + * + * @since 4.5 + */ + protected Rtp rtp; + + /** * Use the RTPs of the protocol to compute the total weight * * @since 4.5 @@ -514,6 +524,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa && Weights.isEqualWeight(totalWeight, computedWeight); } + public Rtp getRtp() { + return rtp; + } + + public void setRtp(Rtp rtp) { + Object oldValue = getRtp(); + this.rtp = rtp; + firePropertyChange(PROPERTY_RTP, oldValue, rtp); + } + public boolean isUseRTP() { return useRTP; } @@ -651,6 +671,32 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } + public void computeRowWeightWithRtp(SpeciesFrequencyRowModel row) { + + Integer number = row.getNumber(); + if (number != null && isUseRTP()) { + + //Formule Poids (gramme) = a Taille (cm) ^ b + Rtp rtp = getRtp(); + + Float lengthStep = row.getLengthStep(); + if ("cm".equals(getLengthStepCaracteristicUnit())) { + // measurement in cm asked + lengthStep = lengthStep / 10; + } + + float weight = (float)(number * rtp.getA() * Math.pow(lengthStep, rtp.getB())); + if (weightUnit == WeightUnit.KG) { + weight = weight / 1000; + } + row.setComputedWeight(weight); + + } else { + row.setComputedWeight(null); + } + + } + public int numberOfRows(float lengthStep) { return cache.numberOfRows(lengthStep); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
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 47891d347497825fc33c7c52ef004093e471a2b3 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 25 18:53:22 2016 +0100 une seule popup pour l'histogramme pour pouvoir la fermer quand on quitte (refs #8019) --- .../catches/species/frequency/SpeciesFrequencyUIHandler.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 bbe40c6..f401cfa 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 @@ -124,6 +124,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private JFreeChart chart; + protected final JFrame histogramPopup = new JFrame(); + protected Caracteristic sexCaracteristic; /** @@ -440,6 +442,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci log.debug("closing: " + ui); } + histogramPopup.dispose(); + frequencyEditor = null; // evict model from validator @@ -776,11 +780,11 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci super.mouseClicked(e); if (e.getClickCount() > 1) { + histogramPopup.getContentPane().removeAll(); ChartPanel chartPanel = new ChartPanel(chart); - JFrame chartPopup = new JFrame(); - chartPopup.add(chartPanel); - chartPopup.pack(); - chartPopup.setVisible(true); + histogramPopup.getContentPane().add(chartPanel); + histogramPopup.pack(); + histogramPopup.setVisible(true); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm