This is an automated email from the git hooks/post-receive script. New commit to branch feature/8157 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit cb8e1353c086954ddba83e9596536a12bcd2dfa0 Author: Kevin Morin <morin@codelutin.com> Date: Tue Apr 5 18:16:24 2016 +0200 - finalement, on ne permet pas de code prélèvement si pas de taille - on remplace le code campagne par le code ruben s'iln 'y en a pas - dans le prefixe, on met ~ au lieu de # quand il n'y a pas de code (fixes #8157) --- .../cps/CalcifiedPiecesSamplingExportService.java | 8 +- .../service/export/cps/SamplingNumberRowModel.java | 9 +- .../tutti/service/sampling/CacheExtractedKey.java | 6 +- .../service/sampling/CruiseSamplingCache.java | 39 +++-- .../sampling/CruiseSamplingCacheLoader.java | 2 +- .../sampling/CruiseSamplingInternalCache.java | 34 ++-- .../tutti/service/sampling/SamplingCodePrefix.java | 7 +- .../IndividualObservationBatchTableModel.java | 2 +- .../frequency/IndividualObservationUICache.java | 7 +- .../frequency/SpeciesFrequencyUIHandler.java | 179 +++++++++++---------- 10 files changed, 149 insertions(+), 144 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/CalcifiedPiecesSamplingExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/CalcifiedPiecesSamplingExportService.java index dfb814a..e851d9f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/CalcifiedPiecesSamplingExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/CalcifiedPiecesSamplingExportService.java @@ -12,11 +12,11 @@ import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiDataContext; import fr.ifremer.tutti.service.TuttiServiceContext; import fr.ifremer.tutti.service.sampling.CacheExtractedKey; -import fr.ifremer.tutti.service.sampling.CruiseSamplingCache; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Export; +import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.BufferedWriter; @@ -58,12 +58,12 @@ public class CalcifiedPiecesSamplingExportService extends AbstractTuttiService { TuttiDataContext dataContext = context.getDataContext(); Preconditions.checkState(dataContext.isCruiseSamplingCacheLoaded()); - SamplingNumberRowModel csvModel = new SamplingNumberRowModel(context.getConfig().getCsvSeparator()); + Decorator<Species> decorator = decoratorService.getDecoratorByType(Species.class, DecoratorService.WITH_SURVEY_CODE_NO_NAME); + SamplingNumberRowModel csvModel = new SamplingNumberRowModel(context.getConfig().getCsvSeparator(), decorator); Map<String, Species> referenceSpeciesByReferenceTaxonId = Speciess.splitReferenceSpeciesByReferenceTaxonId(dataContext.getReferentSpecies()); - CruiseSamplingCache cruiseSamplingCache = context.getDataContext().getOptionalCruiseSamplingCache().get(); - List<CacheExtractedKey> rows = cruiseSamplingCache.getSamplingNumbers(referenceSpeciesByReferenceTaxonId); + List<CacheExtractedKey> rows = context.getDataContext().getOptionalCruiseSamplingCache().get().getSamplingNumbers(referenceSpeciesByReferenceTaxonId); BufferedWriter writer = null; try { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/SamplingNumberRowModel.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/SamplingNumberRowModel.java index 4bbea86..b59333d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/SamplingNumberRowModel.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/export/cps/SamplingNumberRowModel.java @@ -6,6 +6,7 @@ import fr.ifremer.tutti.service.csv.AbstractTuttiImportExportModel; import fr.ifremer.tutti.service.csv.TuttiCsvUtil; import fr.ifremer.tutti.service.sampling.CacheExtractedKey; import org.nuiton.csv.ValueFormatter; +import org.nuiton.decorator.Decorator; import static org.nuiton.i18n.I18n.t; @@ -15,24 +16,24 @@ import static org.nuiton.i18n.I18n.t; */ public class SamplingNumberRowModel extends AbstractTuttiImportExportModel<CacheExtractedKey> { - public SamplingNumberRowModel(char separator) { + public SamplingNumberRowModel(char separator, Decorator<Species> speciesCodeDecorator) { super(separator); newColumnForExport(t("tutti.service.calcifiedPiecesSamplingReport.header.surveyCode"), CacheExtractedKey.PROPERTY_SPECIES, new ValueFormatter<Species>() { @Override public String format(Species species) { - return String.valueOf(species.getSurveyCode()); + return speciesCodeDecorator.toString(species); } }); newColumnForExport(t("tutti.service.calcifiedPiecesSamplingReport.header.geniusName"), CacheExtractedKey.PROPERTY_SPECIES, new ValueFormatter<Species>() { @Override public String format(Species species) { - return String.valueOf(species.getName()); + return species.getName(); } }); - newColumnForExport(t("tutti.service.calcifiedPiecesSamplingReport.header.lengthStep"), CacheExtractedKey.PROPERTY_LENGTH_STEP, TuttiCsvUtil.INTEGER); + newColumnForExport(t("tutti.service.calcifiedPiecesSamplingReport.header.lengthStep"), CacheExtractedKey.PROPERTY_LENGTH_STEP, TuttiCsvUtil.PRIMITIVE_INTEGER); newColumnForExport(t("tutti.service.calcifiedPiecesSamplingReport.header.maturity"), CacheExtractedKey.PROPERTY_MATURITY, new ValueFormatter<Boolean>() { @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CacheExtractedKey.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CacheExtractedKey.java index a86bb28..7b9d064 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CacheExtractedKey.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CacheExtractedKey.java @@ -19,17 +19,17 @@ public class CacheExtractedKey implements Serializable { public static final String PROPERTY_MAX_BY_LENGTH_STEP = "maxByLengthStep"; protected Species species; - protected Integer lengthStep; + protected int lengthStep; protected Boolean maturity; protected QualitativeValueId sex; protected int samplingNb; protected Integer maxByLengthStep; - public Integer getLengthStep() { + public int getLengthStep() { return lengthStep; } - public void setLengthStep(Integer lengthStep) { + public void setLengthStep(int lengthStep) { this.lengthStep = lengthStep; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java index fe84fa8..0420d51 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java @@ -115,7 +115,7 @@ public class CruiseSamplingCache implements Closeable { */ private final Map<Integer, MutableInt> highestSamplingCodeBySpecies = new HashMap<>(); - public CruiseSamplingCache(Integer cruiseId, TuttiProtocol protocol, Caracteristic sexCaracteristic, Collection<Caracteristic> maturityCaracteristics) { + public CruiseSamplingCache(int cruiseId, TuttiProtocol protocol, Caracteristic sexCaracteristic, Collection<Caracteristic> maturityCaracteristics) { this.cruiseId = cruiseId; this.sexCaracteristic = sexCaracteristic; this.protocolId = protocol.getId(); @@ -135,7 +135,7 @@ public class CruiseSamplingCache implements Closeable { protocol.getMaturityCaracteristics().forEach(mc -> matureStatesByMaturityCracteristic.putAll(mc.getId(), mc.getMatureStateIds())); } - public Integer getCruiseId() { + public int getCruiseId() { return cruiseId; } @@ -187,7 +187,7 @@ public class CruiseSamplingCache implements Closeable { * @param optionalZone la zone (facultative) de l'opération de pêche concernée * @param individualObservationBatch l'observation individuelle à ajouter au cache */ - public void addIndividualObservation(Integer fishingOperationId, + public void addIndividualObservation(int fishingOperationId, Optional<Zone> optionalZone, IndividualObservationBatch individualObservationBatch) { @@ -201,8 +201,8 @@ public class CruiseSamplingCache implements Closeable { Boolean maturity = getMaturity(individualObservationBatch); // l'observation peut ne pas avoir de taille si elle a un code de prélèvement - Float lengthStep = individualObservationBatch.getSize(); - Integer lengthStepInMm = lengthStep == null ? null : Numbers.convertToMm(lengthStep, individualObservationBatch.getLengthStepCaracteristic().getUnit()); + float lengthStep = individualObservationBatch.getSize(); + int lengthStepInMm = Numbers.convertToMm(lengthStep, individualObservationBatch.getLengthStepCaracteristic().getUnit()); CaracteristicQualitativeValue gender = individualObservationBatch.getCaracteristics().getQualitativeValue(sexCaracteristic); @@ -259,12 +259,12 @@ public class CruiseSamplingCache implements Closeable { * @param maturity la maturité de l'échantillon (peut-être null) * @param lengthStep la classe de taille de l'échantillon (en mm) */ - public void addIndividualObservation(Integer fishingOperationId, + public void addIndividualObservation(int fishingOperationId, Optional<Zone> optionalZone, Species species, CaracteristicQualitativeValue gender, Boolean maturity, - Integer lengthStep) { + int lengthStep) { Objects.requireNonNull(fishingOperationId); Objects.requireNonNull(species); @@ -359,12 +359,12 @@ public class CruiseSamplingCache implements Closeable { * @param lengthStep la classe de taille de l'échantillon (en mm) * @param samplingCode le code de prélèvement ajouté */ - public void addSampling(Integer fishingOperationId, + public void addSampling(int fishingOperationId, Optional<Zone> optionalZone, Species species, CaracteristicQualitativeValue gender, Boolean maturity, - Integer lengthStep, + int lengthStep, String samplingCode) { Objects.requireNonNull(fishingOperationId); @@ -407,7 +407,7 @@ public class CruiseSamplingCache implements Closeable { * @param optionalZone la zone (facultative) de l'opération de pêche concernée * @param individualObservationBatches les observations individuelles à supprimer du cache */ - public void removeIndividualObservations(Integer fishingOperationId, + public void removeIndividualObservations(int fishingOperationId, Optional<Zone> optionalZone, Collection<IndividualObservationBatch> individualObservationBatches) { @@ -475,7 +475,7 @@ public class CruiseSamplingCache implements Closeable { * @param maturity la maturité de l'échantillon (peut-être null) * @param lengthStep la classe de taille de l'échantillon (en mm) */ - public void removeIndividualObservation(Integer fishingOperationId, + public void removeIndividualObservation(int fishingOperationId, Optional<Zone> optionalZone, Species species, CaracteristicQualitativeValue gender, @@ -559,7 +559,7 @@ public class CruiseSamplingCache implements Closeable { * @param lengthStep la classe de taille de l'échantillon (en mm) * @param samplingCode le code de prélèvement supprimé */ - public void removeSampling(Integer fishingOperationId, + public void removeSampling(int fishingOperationId, Optional<Zone> optionalZone, Species species, CaracteristicQualitativeValue gender, @@ -667,10 +667,7 @@ public class CruiseSamplingCache implements Closeable { listeners.remove(SamplingListener.class, listener); } - public Optional<CalcifiedPiecesSamplingDefinition> getCalcifiedPiecesSamplingDefinition(Species species, Boolean maturity, Integer lengthStep) { - if (lengthStep == null) { - return Optional.empty(); - } + public Optional<CalcifiedPiecesSamplingDefinition> getCalcifiedPiecesSamplingDefinition(Species species, Boolean maturity, int lengthStep) { Collection<CalcifiedPiecesSamplingDefinition> cpsDefinitions = cpsDefinitionsBySpecies.get(species.getReferenceTaxonId()); return cpsDefinitions.stream() .filter(cpsDef -> Objects.equals(cpsDef.getMaturity(), maturity) @@ -725,7 +722,7 @@ public class CruiseSamplingCache implements Closeable { return maturity; } - public Boolean getMaturity(Integer speciesId, Optional<CaracteristicQualitativeValue> maturityQualitativeValue) { + public Boolean getMaturity(int speciesId, Optional<CaracteristicQualitativeValue> maturityQualitativeValue) { Boolean maturity = null; Optional<Caracteristic> maturityCaracteristic = Optional.ofNullable(maturityCaracteristicBySpecies.get(speciesId)); if (maturityCaracteristic.isPresent() && maturityQualitativeValue.isPresent()) { @@ -734,15 +731,15 @@ public class CruiseSamplingCache implements Closeable { return maturity; } - public int getNextSamplingCodeId(Integer speciesId) { + public int getNextSamplingCodeId(int speciesId) { MutableInt samplingCode = highestSamplingCodeBySpecies.get(speciesId); return (samplingCode == null ? 0 : samplingCode.intValue()) + 1; // return highestSamplingCodeBySpecies.getOrDefault(speciesId, 0) + 1; } - protected int addSamplingCode(Integer speciesId, String samplingCode) { + protected int addSamplingCode(int speciesId, String samplingCode) { String[] codeParts = samplingCode.split("#"); - Integer code = Integer.parseInt(codeParts[codeParts.length - 1]); + int code = Integer.parseInt(codeParts[codeParts.length - 1]); // increment the highest sampling code if it is this code // return highestSamplingCodeBySpecies.compute(speciesId, @@ -761,7 +758,7 @@ public class CruiseSamplingCache implements Closeable { } - protected void removeSamplingCode(Integer speciesId, String samplingCode) { + protected void removeSamplingCode(int speciesId, String samplingCode) { int code = SamplingCodePrefix.extractSamplingCodeIdFromSamplingCode(samplingCode); // decrement the highest sampling code if it is this code diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCacheLoader.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCacheLoader.java index ad42381..6406a1a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCacheLoader.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingCacheLoader.java @@ -95,7 +95,7 @@ public class CruiseSamplingCacheLoader { Optional<Zone> optionalZone = cruiseSamplingCache.tryFindZone(fishingOperation); - allIndividualObservationBatchsForFishingOperation.stream().filter(obs -> obs.getSize() != null || obs.getSamplingCode() != null).forEach( + allIndividualObservationBatchsForFishingOperation.stream().filter(obs -> obs.getSize() != null).forEach( individualObservationBatch -> cruiseSamplingCache.addIndividualObservation(fishingOperationId, optionalZone, individualObservationBatch)); }); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingInternalCache.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingInternalCache.java index de97c1a..9bd9b1a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingInternalCache.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/CruiseSamplingInternalCache.java @@ -56,10 +56,10 @@ class CruiseSamplingInternalCache implements Closeable { private static final String KEY_SEPARATOR = "#"; - public static String createSamplingKey(Species species, CaracteristicQualitativeValue gender, Boolean maturity, Integer lengthStep) { + public static String createSamplingKey(Species species, CaracteristicQualitativeValue gender, Boolean maturity, int lengthStep) { Objects.requireNonNull(species); return species.getReferenceTaxonId() + KEY_SEPARATOR + (gender == null ? "" : gender.getId()) + - KEY_SEPARATOR + (maturity == null ? "" : maturity.toString()) + KEY_SEPARATOR + (lengthStep == null ? "" : lengthStep.intValue()); + KEY_SEPARATOR + (maturity == null ? "" : maturity.toString()) + KEY_SEPARATOR + lengthStep; } public static String addPrefixKey(Serializable prefix, String key) { @@ -199,28 +199,22 @@ class CruiseSamplingInternalCache implements Closeable { Species species = speciesById.get(nextToken); key.setSpecies(species); - if (i < keyTokens.length) { - nextToken = keyTokens[i++]; - if (!StringUtils.isEmpty(nextToken)) { - QualitativeValueId sex = QualitativeValueId.fromValue(Integer.parseInt(nextToken)); - key.setSex(sex); - } + nextToken = keyTokens[i++]; + if (!StringUtils.isEmpty(nextToken)) { + QualitativeValueId sex = QualitativeValueId.fromValue(Integer.parseInt(nextToken)); + key.setSex(sex); } - if (i < keyTokens.length) { - nextToken = keyTokens[i++]; - if (!StringUtils.isEmpty(nextToken)) { - Boolean maturity = Boolean.parseBoolean(nextToken); - key.setMaturity(maturity); - } + nextToken = keyTokens[i++]; + if (!StringUtils.isEmpty(nextToken)) { + Boolean maturity = Boolean.parseBoolean(nextToken); + key.setMaturity(maturity); } - if (i < keyTokens.length) { - nextToken = keyTokens[i++]; - if (!StringUtils.isEmpty(nextToken)) { - Integer lengthStep = Integer.parseInt(nextToken); - key.setLengthStep(lengthStep); - } + nextToken = keyTokens[i++]; + if (!StringUtils.isEmpty(nextToken)) { + int lengthStep = Integer.parseInt(nextToken); + key.setLengthStep(lengthStep); } key.setSamplingNb(entry.getValue().getSamplingNb()); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingCodePrefix.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingCodePrefix.java index 2e29d42..6a5528f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingCodePrefix.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingCodePrefix.java @@ -32,12 +32,17 @@ import java.util.Objects; */ public class SamplingCodePrefix { - public static final String SEPARATOR = "#"; + public static final String SEPARATOR = "#"; + public static final String NO_SURVEY_CODE_LABEL = "~"; + protected final String prefix; protected final String species; public SamplingCodePrefix(String prefix, String species) { this.prefix = prefix; + if (SEPARATOR.equals(species)) { + species = NO_SURVEY_CODE_LABEL; + } this.species = species; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index 3e272c1..79ae366 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -247,7 +247,7 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab } else if (SAMPLING_CODE.equals(columnIdentifier)) { - editable = getValueAt(rowIndex, columnIndex) == null; + editable = getValueAt(rowIndex, columnIndex) == null && getValueAt(rowIndex, identifiers.indexOf(SIZE)) != null; } else { editable = super.isCellEditable(rowIndex, columnIndex, columnIdentifier); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java index f6a03ab..7358b26 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/IndividualObservationUICache.java @@ -307,7 +307,7 @@ public class IndividualObservationUICache implements Closeable { */ public void incrementsSamplingNb(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, - float lengthStep, + Float lengthStep, String samplingCode) { if (!on) { @@ -318,11 +318,12 @@ public class IndividualObservationUICache implements Closeable { } Boolean maturity = samplingCache.get().getMaturity(uiModel.getBatch().getSpecies().getReferenceTaxonId(), maturityQualitativeValue); + Integer lengthStepInMm = lengthStep == null ? null : uiModel.getLengthStepInMm(lengthStep); samplingCache.get().addSampling(fishingOperation, species, gender, maturity, - uiModel.getLengthStepInMm(lengthStep), + lengthStepInMm, samplingCode); // Le code n'est plus utilisable @@ -395,7 +396,7 @@ public class IndividualObservationUICache implements Closeable { */ public void decrementsSamplingNb(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, - float lengthStep, + Float lengthStep, String samplingCode) { if (!on) { 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 e81ea30..3bc8188 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 @@ -222,115 +222,122 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci CaracteristicQualitativeValue gender = row.getGender(sexCaracteristic); Optional<CaracteristicQualitativeValue> maturity = row.getMaturityState(); - if (IndividualObservationBatchRowModel.PROPERTY_SIZE.equals(propertyName)) { + switch (propertyName) { + case IndividualObservationBatchRowModel.PROPERTY_SIZE: + { - Float oldValue = (Float) evt.getOldValue(); - Float newValue = (Float) evt.getNewValue(); + Float oldValue = (Float) evt.getOldValue(); + Float newValue = (Float) evt.getNewValue(); - if (oldValue != null) { - individualObservationUICache.decrementsObservationNb(gender, maturity, oldValue, Optional.ofNullable(row.getSamplingCode())); - } - if (newValue != null) { - individualObservationUICache.incrementsObservationNb(gender, maturity, newValue, Optional.ofNullable(row.getSamplingCode())); - } + if (oldValue != null) { + individualObservationUICache.decrementsObservationNb(gender, maturity, oldValue, Optional.ofNullable(row.getSamplingCode())); + } + if (newValue != null) { + individualObservationUICache.incrementsObservationNb(gender, maturity, newValue, Optional.ofNullable(row.getSamplingCode())); + } - // we only update the frequencies if the row is valid - if (row.isValid() && getModel().mustCopyIndividualObservationSize()) { - updateFrequencyRowsNumbers(oldValue, newValue); + // we only update the frequencies if the row is valid + if (row.isValid() && getModel().mustCopyIndividualObservationSize()) { + updateFrequencyRowsNumbers(oldValue, newValue); - Float weight = row.getWeight(); - if (getModel().mustCopyIndividualObservationWeight() && weight != null) { - updateFrequencyRowsWeights(oldValue, -weight); - updateFrequencyRowsWeights(newValue, weight); + Float weight = row.getWeight(); + if (getModel().mustCopyIndividualObservationWeight() && weight != null) { + updateFrequencyRowsWeights(oldValue, -weight); + updateFrequencyRowsWeights(newValue, weight); + } + } } - } - } + break; - if (row.isValid() && getModel().mustCopyIndividualObservationWeight() - && IndividualObservationBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { + case IndividualObservationBatchRowModel.PROPERTY_WEIGHT: + if (row.isValid() && getModel().mustCopyIndividualObservationWeight()) { - Float oldValue = (Float) evt.getOldValue(); - Float newValue = (Float) evt.getNewValue(); - Float weightToAdd; + Float oldValue = (Float) evt.getOldValue(); + Float newValue = (Float) evt.getNewValue(); + Float weightToAdd; - if (oldValue == null) { - weightToAdd = newValue; + if (oldValue == null) { + weightToAdd = newValue; - } else if (newValue == null) { - weightToAdd = -oldValue; + } else if (newValue == null) { + weightToAdd = -oldValue; - } else { - weightToAdd = newValue - oldValue; - } + } else { + weightToAdd = newValue - oldValue; + } - if (weightToAdd != null) { - updateFrequencyRowsWeights(row.getSize(), weightToAdd); - } - } + if (weightToAdd != null) { + updateFrequencyRowsWeights(row.getSize(), weightToAdd); + } + } + break; - if (row.withSize() - && (IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS.equals(propertyName) - || IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS.equals(propertyName))) { + case IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS: + case IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS: + if (row.withSize()) { + CaracteristicMap oldValue = (CaracteristicMap) evt.getOldValue(); + CaracteristicMap newValue = (CaracteristicMap) evt.getNewValue(); - CaracteristicMap oldValue = (CaracteristicMap) evt.getOldValue(); - CaracteristicMap newValue = (CaracteristicMap) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("caracteristics changed"); + } - if (log.isInfoEnabled()) { - log.info("caracteristics changed"); - } + if (row.getMaturityCaracteristic().isPresent()) { + Optional<CaracteristicQualitativeValue> oldMaturity = Optional.ofNullable((CaracteristicQualitativeValue) oldValue.get(row.getMaturityCaracteristic().get())); + Optional<CaracteristicQualitativeValue> newMaturity = Optional.ofNullable((CaracteristicQualitativeValue) newValue.get(row.getMaturityCaracteristic().get())); + if (log.isInfoEnabled()) { + log.info("maturities : " + oldMaturity + " " + newMaturity); + } + if (!Objects.equals(oldMaturity, newMaturity)) { + individualObservationUICache.decrementsObservationNb(gender, oldMaturity, row.getSize()); + individualObservationUICache.incrementsObservationNb(gender, newMaturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); + } + } - if (row.getMaturityCaracteristic().isPresent()) { - Optional<CaracteristicQualitativeValue> oldMaturity = Optional.ofNullable((CaracteristicQualitativeValue) oldValue.get(row.getMaturityCaracteristic().get())); - Optional<CaracteristicQualitativeValue> newMaturity = Optional.ofNullable((CaracteristicQualitativeValue) newValue.get(row.getMaturityCaracteristic().get())); - if (log.isInfoEnabled()) { - log.info("maturities : " + oldMaturity + " " + newMaturity); - } - if (!Objects.equals(oldMaturity, newMaturity)) { - individualObservationUICache.decrementsObservationNb(gender, oldMaturity, row.getSize()); - individualObservationUICache.incrementsObservationNb(gender, newMaturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); + CaracteristicQualitativeValue oldGender = (CaracteristicQualitativeValue) oldValue.get(sexCaracteristic); + CaracteristicQualitativeValue newGender = (CaracteristicQualitativeValue) newValue.get(sexCaracteristic); + if (!Objects.equals(oldGender, newGender)) { + individualObservationUICache.decrementsObservationNb(oldGender, maturity, row.getSize()); + individualObservationUICache.incrementsObservationNb(newGender, maturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); + } } - } + break; - CaracteristicQualitativeValue oldGender = (CaracteristicQualitativeValue) oldValue.get(sexCaracteristic); - CaracteristicQualitativeValue newGender = (CaracteristicQualitativeValue) newValue.get(sexCaracteristic); - if (!Objects.equals(oldGender, newGender)) { - individualObservationUICache.decrementsObservationNb(oldGender, maturity, row.getSize()); - individualObservationUICache.incrementsObservationNb(newGender, maturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); - } - - } + case IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE: + if (row.withSize()) { - if (IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE.equals(propertyName) && row.withSize()) { - String oldValue = (String) evt.getOldValue(); - String newValue = (String) evt.getNewValue(); - - if (StringUtils.isNotBlank(oldValue)) { - individualObservationUICache.decrementsSamplingNb(gender, maturity, row.getSize(), oldValue); - } - if (StringUtils.isNotBlank(newValue)) { - individualObservationUICache.incrementsSamplingNb(gender, maturity, row.getSize(), newValue); - } - } + String oldValue = (String) evt.getOldValue(); + String newValue = (String) evt.getNewValue(); - // if the row's valid state changes, then remove or readd it to the frequencies - if (!getModel().isRowComputationInProgress() - && IndividualObservationBatchRowModel.PROPERTY_VALID.equals(propertyName)) { + if (StringUtils.isNotBlank(oldValue)) { + individualObservationUICache.decrementsSamplingNb(gender, maturity, row.getSize(), oldValue); + } + if (StringUtils.isNotBlank(newValue)) { + individualObservationUICache.incrementsSamplingNb(gender, maturity, row.getSize(), newValue); + } + } + break; - boolean oldValue = (boolean) evt.getOldValue(); - boolean newValue = (boolean) evt.getNewValue(); + case IndividualObservationBatchRowModel.PROPERTY_VALID: + // if the row's valid state changes, then remove or readd it to the frequencies + if (!getModel().isRowComputationInProgress()) { + boolean oldValue = (boolean) evt.getOldValue(); + boolean newValue = (boolean) evt.getNewValue(); - if (oldValue && getModel().mustCopyIndividualObservationSize()) { - updateFrequencyRowsNumbers(row.getSize(), null); - } - if (newValue) { - if (getModel().mustCopyIndividualObservationSize()) { - updateFrequencyRowsNumbers(null, row.getSize()); - } - if (getModel().mustCopyIndividualObservationWeight()) { - updateFrequencyRowsWeights(row.getSize(), row.getWeight()); + if (oldValue && getModel().mustCopyIndividualObservationSize()) { + updateFrequencyRowsNumbers(row.getSize(), null); + } + if (newValue) { + if (getModel().mustCopyIndividualObservationSize()) { + updateFrequencyRowsNumbers(null, row.getSize()); + } + if (getModel().mustCopyIndividualObservationWeight()) { + updateFrequencyRowsWeights(row.getSize(), row.getWeight()); + } + } } - } + break; } getModel().recomputeIndividualObservationRowValidState(row); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.