branch feature/8177 updated (10c294f -> 3be764d)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git omits 10c294f augmentation de la taille des messages de prélèvement + limite infinie au lieu de nulle (fixes #8152) omits 39b64fd décoration pour le résumé (refs #8152) omits c14178f gestion des prélèvements + affichage des prélèvements réels (refs #8177 refs #8152) omits c9cd250 gestion des prélèvements dans le cache (refs #8152 refs #8177) omits debfb6e on ajoute le nombre de prélèvement par clé (espece/taille/maturité/sexe) (refs #8152) omits c5d0c17 on déclenche un évènement quand le résumé est mis à jour (refs #8152) adds 9ed3662 correction du redimensionnement (fixes #8162) adds 17ba06f livrable #8162 Merge branch 'feature/8162' into develop adds 379048b correction de la conversion gramme -> unité de la conf (fixes #8189) adds eacf9aa Amélioration javadoc adds 3051429 Ajout d'une nouvelle méthode de conversion qui semble fonctionner adds 563c3b6 Amélioration de la méthode de convertion adds 68fe8e2 Merge branch 'feature/8189' into 'develop' adds bfbdf45 suppression du separateur de la conf, sinon on ne peut pas récupérer les ids des précédents code si le séparateur change (enfin on pourrait mais c'est plus compliqué) (refs #8192) adds dadc607 utilisation d'un objet pour gérer le code de prélèvement (fixes #8192) adds 9e9dbf7 livrable #8192 Merge branch 'feature/8192' into develop adds 189803c l'arrondi du poids rendait le poids négatif positif... d'où le poids total qui ne faisait qu'augmenter (fixes #8146) adds c03c492 fix merge adds 8edb8bd livrable #8146 Merge branch 'feature/8146' into develop adds ffb26da ajout des colonnes de code campagne et de nom scientifique (fixes #8164) adds 3e74e9f livrable #8164 Merge branch 'feature/8164' into develop adds 26554ce ajout de la colonen sexe, même si elle n'est pas dans le protocole (fixes #8191) adds ff2ad98 livrable #8191 Merge branch 'feature/8191' into develop adds 9fb2cd5 on increment et decremente l'algo à partir du moment où il y a une taille (fixes #8194) adds dbaf1ea livrable #8194 Merge branch 'feature/8194' into develop new 8246fab on déclenche un évènement quand le résumé est mis à jour (refs #8152) new cff4876 on ajoute le nombre de prélèvement par clé (espece/taille/maturité/sexe) (refs #8152) new 179a761 gestion des prélèvements dans le cache (refs #8152 refs #8177) new 3e3c3fa gestion des prélèvements + affichage des prélèvements réels (refs #8177 refs #8152) new 6611c70 décoration pour le résumé (refs #8152) new 10d8c6a augmentation de la taille des messages de prélèvement + limite infinie au lieu de nulle (fixes #8152) new 3be764d fix merge This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (10c294f) \ N -- N -- N refs/heads/feature/8177 (3be764d) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 7 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 3be764dd2ea8cf0764d90c6454f151db5732c4b9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 16:43:43 2016 +0200 fix merge commit 10d8c6a7e13ce1398ea090d16acd5587a7cd1d31 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 16:56:35 2016 +0200 augmentation de la taille des messages de prélèvement + limite infinie au lieu de nulle (fixes #8152) commit 6611c706e2efa2c8a6276474f09917f3ae5d215d Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 15:07:16 2016 +0200 décoration pour le résumé (refs #8152) commit 3e3c3fa5d27373760c73cecc119dced198f95e74 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:56:16 2016 +0200 gestion des prélèvements + affichage des prélèvements réels (refs #8177 refs #8152) commit 179a761747c0411cc1347023a41ecf0e71e0b52e Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:55:10 2016 +0200 gestion des prélèvements dans le cache (refs #8152 refs #8177) commit cff4876ae75df7f95ff8993a977ad55ab7e9f9bf Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:53:53 2016 +0200 on ajoute le nombre de prélèvement par clé (espece/taille/maturité/sexe) (refs #8152) commit 8246fab8dfb68a238973b20a4109d94675948d99 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:52:16 2016 +0200 on déclenche un évènement quand le résumé est mis à jour (refs #8152) Summary of changes: .../java/fr/ifremer/tutti/TuttiConfiguration.java | 4 -- .../fr/ifremer/tutti/TuttiConfigurationOption.java | 8 --- .../java/fr/ifremer/tutti/type/WeightUnit.java | 6 -- .../main/java/fr/ifremer/tutti/util/Weights.java | 72 ++++++++++++++++++---- .../ifremer/tutti/service/PersistenceService.java | 4 +- .../fr/ifremer/tutti/service/TuttiDataContext.java | 4 +- .../protocol/CalcifiedPiecesSamplingRow.java | 6 ++ .../protocol/CalcifiedPiecesSamplingRowModel.java | 29 ++++++++- .../CruiseSamplingCache.java | 11 +++- .../CruiseSamplingCacheLoader.java | 2 +- .../CruiseSamplingInternalCache.java | 2 +- .../tutti/service/sampling/SamplingCodePrefix.java | 54 ++++++++++++++++ .../{samplingCache => sampling}/SamplingEvent.java | 2 +- .../SamplingListener.java | 2 +- .../content/actions/EditCatchesSupportAction.java | 2 +- .../swing/content/config/TuttiConfigUIHandler.java | 3 - .../IndividualObservationBatchRowModel.java | 43 ++----------- .../IndividualObservationBatchTableModel.java | 22 +++++-- .../SampleCodeEditionPopupUI.jaxx | 4 +- .../SampleCodeEditionPopupUI.jcss | 2 +- .../SampleCodeEditionPopupUIHandler.java | 3 +- .../SampleCodeEditionPopupUIModel.java | 7 ++- .../SamplingCodeCellEditor.java | 4 +- .../frequency/IndividualObservationUICache.java | 6 +- .../frequency/SpeciesFrequencyRowModel.java | 23 ++++++- .../frequency/SpeciesFrequencyTableModel.java | 40 ++++++------ .../species/frequency/SpeciesFrequencyUI.jaxx | 20 +++--- .../frequency/SpeciesFrequencyUIHandler.java | 46 +++++++++----- .../species/frequency/SpeciesFrequencyUIModel.java | 7 ++- .../frequency/actions/DeleteSampleCodeAction.java | 2 +- .../frequency/actions/EditSampleCodeAction.java | 6 +- .../tutti/ui/swing/util/WideDataComboBoxUI.java | 49 +++++++++++++++ 32 files changed, 344 insertions(+), 151 deletions(-) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/CruiseSamplingCache.java (98%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/CruiseSamplingCacheLoader.java (99%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/CruiseSamplingInternalCache.java (99%) create mode 100644 tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingCodePrefix.java rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/SamplingEvent.java (98%) rename tutti-service/src/main/java/fr/ifremer/tutti/service/{samplingCache => sampling}/SamplingListener.java (95%) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/WideDataComboBoxUI.java -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 8246fab8dfb68a238973b20a4109d94675948d99 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:52:16 2016 +0200 on déclenche un évènement quand le résumé est mis à jour (refs #8152) --- .../tutti/service/sampling/SamplingEvent.java | 28 ++++++++++++---------- .../tutti/service/sampling/SamplingListener.java | 1 + 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java index 834060b..c81b726 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java @@ -43,22 +43,22 @@ public class SamplingEvent extends EventObject { protected final CalcifiedPiecesSamplingDefinition cpsDef; - protected final int nbForCruise; + protected final int nbSamplingForCruise; - protected final int nbForZone; + protected final int nbSamplingForZone; - protected final int nbForOperation; + protected final int nbSamplingForOperation; public SamplingEvent(CruiseSamplingCache source, float lengthStep, CaracteristicQualitativeValue gender, Boolean maturity, - CalcifiedPiecesSamplingDefinition cpsDef, int nbForCruise, int nbForZone, int nbForOperation) { + CalcifiedPiecesSamplingDefinition cpsDef, int nbSamplingForCruise, int nbSamplingForZone, int nbSamplingForOperation) { super(source); this.lengthStep = lengthStep; this.gender = gender; this.maturity = maturity; this.cpsDef = cpsDef; - this.nbForCruise = nbForCruise; - this.nbForZone = nbForZone; - this.nbForOperation = nbForOperation; + this.nbSamplingForCruise = nbSamplingForCruise; + this.nbSamplingForZone = nbSamplingForZone; + this.nbSamplingForOperation = nbSamplingForOperation; } public float getLengthStep() { @@ -73,20 +73,22 @@ public class SamplingEvent extends EventObject { return maturity; } + + public CalcifiedPiecesSamplingDefinition getCpsDef() { return cpsDef; } - public int getNbForCruise() { - return nbForCruise; + public int getNbSamplingForCruise() { + return nbSamplingForCruise; } - public int getNbForZone() { - return nbForZone; + public int getNbSamplingForZone() { + return nbSamplingForZone; } - public int getNbForOperation() { - return nbForOperation; + public int getNbSamplingForOperation() { + return nbSamplingForOperation; } @Override diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java index 8f14783..6aa37e4 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingListener.java @@ -34,5 +34,6 @@ public interface SamplingListener extends EventListener { void samplingNeeded(SamplingEvent event); + void resumeUpdated(SamplingEvent event); } -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit cff4876ae75df7f95ff8993a977ad55ab7e9f9bf Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:53:53 2016 +0200 on ajoute le nombre de prélèvement par clé (espece/taille/maturité/sexe) (refs #8152) --- .../sampling/CruiseSamplingInternalCache.java | 98 ++++++++++++++++++---- 1 file changed, 81 insertions(+), 17 deletions(-) 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 b4ae130..96afef3 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 @@ -67,35 +67,34 @@ class CruiseSamplingInternalCache implements Closeable { return prefix + KEY_SEPARATOR + key; } - private final Map<String, MutableInt> data = new TreeMap<>(); + private final Map<String, SamplingData> data = new TreeMap<>(); - public int increment(String samplingKey) { + public int incrementObservationNb(String samplingKey) { Objects.requireNonNull(samplingKey); - MutableInt value = data.computeIfAbsent(samplingKey, s -> new MutableInt(0)); - value.increment(); + SamplingData value = data.computeIfAbsent(samplingKey, s -> new SamplingData()); + int obsNb = value.incrementObservationNb(); if (log.isDebugEnabled()) { - log.debug(samplingKey + " → " + value); + log.debug(samplingKey + " → " + obsNb); } - return value.intValue(); + return obsNb; } - public int decrement(String samplingKey) { + public int decrementObservationNb(String samplingKey) { Objects.requireNonNull(samplingKey); - MutableInt value = data.get(samplingKey); - value.decrement(); + SamplingData value = data.get(samplingKey); + int obsNb = value.decrementObservationNb(); if (log.isDebugEnabled()) { - log.debug(samplingKey + " → " + value); + log.debug(samplingKey + " → " + obsNb); } - return value.intValue(); + return obsNb; } - public Integer decrementIfExist(String samplingKey) { + public Integer decrementObservationNbIfExist(String samplingKey) { Objects.requireNonNull(samplingKey); Integer result = null; - MutableInt value = data.get(samplingKey); + SamplingData value = data.get(samplingKey); if (value != null) { - value.decrement(); - result = value.intValue(); + result = value.decrementObservationNb(); if (log.isDebugEnabled()) { log.debug(samplingKey + " → " + value); } @@ -103,6 +102,36 @@ class CruiseSamplingInternalCache implements Closeable { return result; } + public int incrementSamplingNb(String samplingKey) { + Objects.requireNonNull(samplingKey); + SamplingData value = data.computeIfAbsent(samplingKey, s -> new SamplingData()); + int samplingNb = value.incrementSamplingNb(); + if (log.isDebugEnabled()) { + log.debug(samplingKey + " → " + samplingNb); + } + return samplingNb; + } + + public int decrementSamplingNb(String samplingKey) { + Objects.requireNonNull(samplingKey); + SamplingData value = data.get(samplingKey); + int samplingNb = value.decrementSamplingNb(); + if (log.isDebugEnabled()) { + log.debug(samplingKey + " → " + samplingNb); + } + return samplingNb; + } + + public int getSamplingNb(String samplingKey) { + Objects.requireNonNull(samplingKey); + SamplingData value = data.get(samplingKey); + int samplingNb = value.getSamplingNb(); + if (log.isDebugEnabled()) { + log.debug(samplingKey + " → " + samplingNb); + } + return samplingNb; + } + @Override public void close() { data.clear(); @@ -128,10 +157,10 @@ class CruiseSamplingInternalCache implements Closeable { log.debug("Ask to remove all keys starting with: " + keyPrefix); } Set<String> result = new LinkedHashSet<>(); - Iterator<Map.Entry<String, MutableInt>> iterator = data.entrySet().iterator(); + Iterator<Map.Entry<String, SamplingData>> iterator = data.entrySet().iterator(); int keyPrefixLength = keyPrefix.length(); while (iterator.hasNext()) { - Map.Entry<String, MutableInt> entry = iterator.next(); + Map.Entry<String, SamplingData> entry = iterator.next(); String key = entry.getKey(); if (key.startsWith(keyPrefix)) { @@ -145,4 +174,39 @@ class CruiseSamplingInternalCache implements Closeable { return result; } + private class SamplingData { + + private MutableInt observationNb = new MutableInt(0); + private MutableInt samplingNb = new MutableInt(0); + + public int incrementObservationNb() { + observationNb.increment(); + return getObservationNb(); + } + + public int decrementObservationNb() { + observationNb.decrement(); + return getObservationNb(); + } + + public int getObservationNb() { + return observationNb.intValue(); + } + + public int incrementSamplingNb() { + samplingNb.increment(); + return getSamplingNb(); + } + + public int decrementSamplingNb() { + samplingNb.decrement(); + return getSamplingNb(); + } + + public int getSamplingNb() { + return samplingNb.intValue(); + } + + + } } -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 179a761747c0411cc1347023a41ecf0e71e0b52e Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:55:10 2016 +0200 gestion des prélèvements dans le cache (refs #8152 refs #8177) --- .../service/sampling/CruiseSamplingCache.java | 246 ++++++++++++++++++--- 1 file changed, 221 insertions(+), 25 deletions(-) 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 756e667..55122a0 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 @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.sampling; +package fr.ifremer.tutti.service.samplingCache; /* * #%L @@ -201,8 +201,6 @@ public class CruiseSamplingCache implements Closeable { CaracteristicQualitativeValue gender = individualObservationBatch.getCaracteristics().getQualitativeValue(sexCaracteristic); - addIndividualObservation(fishingOperationId, optionalZone, species, gender, maturity, lengthStep); - String samplingCode = individualObservationBatch.getSamplingCode(); if (samplingCode != null) { int code = SamplingCodePrefix.extractSamplingCodeIdFromSamplingCode(samplingCode); @@ -213,10 +211,11 @@ public class CruiseSamplingCache implements Closeable { } } + addIndividualObservation(fishingOperationId, optionalZone, species, gender, maturity, lengthStep); } /** - * Ajout d'un échantillon dans le cache. + * Ajout d'un observation dans le cache. * * @param fishingOperation l'opération de pêche concernée * @param species l'espèces concernée @@ -240,7 +239,7 @@ public class CruiseSamplingCache implements Closeable { } /** - * Ajout d'un échantillon dans le cache. + * Ajout d'une observation dans le cache. * * @param fishingOperationId l'identifiant de l'opération de pêche concernée * @param optionalZone la zone (facultative) de l'opération de pêche concernée @@ -279,28 +278,117 @@ public class CruiseSamplingCache implements Closeable { } String samplingKey = CruiseSamplingInternalCache.createSamplingKey(species, gender, maturity, lengthStep); - int totalValue = totalCruiseCache.increment(samplingKey); + int totalValue = totalCruiseCache.incrementObservationNb(samplingKey); + int totalSamplingNb = totalCruiseCache.getSamplingNb(samplingKey); + int zoneValue = 0; + int zoneSamplingNb = 0; if (optionalZone.isPresent()) { String zoneKey = CruiseSamplingInternalCache.addPrefixKey(optionalZone.get().getId(), samplingKey); - zoneValue = zoneCache.increment(zoneKey); + zoneValue = zoneCache.incrementObservationNb(zoneKey); + zoneSamplingNb = zoneCache.getSamplingNb(zoneKey); } String operationKey = CruiseSamplingInternalCache.addPrefixKey(fishingOperationId, samplingKey); - int operationValue = operationCache.increment(operationKey); + int operationValue = operationCache.incrementObservationNb(operationKey); + int operationSamplingNb = operationCache.getSamplingNb(operationKey); if (log.isInfoEnabled()) { - log.info("addIndividualObservation " + samplingKey + " => op " + operationValue + " / zone " + zoneValue + " / cruise " + totalValue); + log.info("add Individual Observation " + samplingKey + " => op " + operationValue + " / zone " + zoneValue + " / cruise " + totalValue); } + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + if (!isLoading() && (totalValue == 1 || totalValue % samplingInterval == 1)) { if (log.isInfoEnabled()) { log.info("-> needs sampling"); } - fireSamplingNeeded(lengthStep, gender, maturity, cpsDefinition, samplingInterval, totalValue, zoneValue, operationValue); + fireSamplingNeeded(event); } + fireResumeUpdated(event); + + } + } + } + + /** + * Ajout d'un prélèvement dans le cache. + * + * @param fishingOperation l'opération de pêche concernée + * @param species l'espèces concernée + * @param gender le sexe de l'échantillon (peut-être null) + * @param maturity la maturité de l'échantillon (peut-être null) + * @param lengthStep la classe de taille de l'échantillon + * @param samplingCode le code de prélèvement ajouté + */ + public void addSampling(FishingOperation fishingOperation, + Species species, + CaracteristicQualitativeValue gender, + Boolean maturity, + float lengthStep, + String samplingCode) { + + Objects.requireNonNull(fishingOperation); + Objects.requireNonNull(species); + + Optional<Zone> optionalZone = tryFindZone(fishingOperation); + + addSampling(fishingOperation.getIdAsInt(), optionalZone, species, gender, maturity, lengthStep, samplingCode); + } + + /** + * Ajout d'un prélèvement dans le cache. + * + * @param fishingOperationId l'identifiant de l'opération de pêche concernée + * @param optionalZone la zone (facultative) de l'opération de pêche concernée + * @param species l'espèces concernée + * @param gender le sexe de l'échantillon (peut-être null) + * @param maturity la maturité de l'échantillon (peut-être null) + * @param lengthStep la classe de taille de l'échantillon + * @param samplingCode le code de prélèvement ajouté + */ + public void addSampling(Integer fishingOperationId, + Optional<Zone> optionalZone, + Species species, + CaracteristicQualitativeValue gender, + Boolean maturity, + float lengthStep, + String samplingCode) { + + Objects.requireNonNull(fishingOperationId); + Objects.requireNonNull(species); + + Optional<CalcifiedPiecesSamplingDefinition> cpsDefinitionOpt = getCalcifiedPiecesSamplingDefinition(species, maturity, lengthStep); + + if (cpsDefinitionOpt.isPresent()) { + + CalcifiedPiecesSamplingDefinition cpsDefinition = cpsDefinitionOpt.get(); + + if (!cpsDefinition.isSex()) { + gender = null; } + String samplingKey = CruiseSamplingInternalCache.createSamplingKey(species, gender, maturity, lengthStep); + + int totalSamplingNb = totalCruiseCache.incrementSamplingNb(samplingKey); + + int zoneSamplingNb = 0; + if (optionalZone.isPresent()) { + String zoneKey = CruiseSamplingInternalCache.addPrefixKey(optionalZone.get().getId(), samplingKey); + zoneSamplingNb = zoneCache.incrementSamplingNb(zoneKey); + } + String operationKey = CruiseSamplingInternalCache.addPrefixKey(fishingOperationId, samplingKey); + + int operationSamplingNb = operationCache.incrementSamplingNb(operationKey); + + addSamplingCode(species.getReferenceTaxonId(), samplingCode); + + if (log.isInfoEnabled()) { + log.info("add Sampling " + samplingKey + " => op " + operationSamplingNb + " / zone " + zoneSamplingNb + " / cruise " + totalSamplingNb); + } + + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + fireResumeUpdated(event); } } @@ -329,6 +417,14 @@ public class CruiseSamplingCache implements Closeable { Objects.requireNonNull(lengthStep); CaracteristicQualitativeValue gender = individualObservationBatch.getCaracteristics().getQualitativeValue(sexCaracteristic); + + String samplingCode = individualObservationBatch.getSamplingCode(); + if (samplingCode != null) { + + removeSampling(fishingOperationId, optionalZone, species, gender, maturity, lengthStep, samplingCode); + + } + removeIndividualObservation(fishingOperationId, optionalZone, species, gender, maturity, lengthStep); }); @@ -401,15 +497,15 @@ public class CruiseSamplingCache implements Closeable { String samplingKey = CruiseSamplingInternalCache.createSamplingKey(species, gender, maturity, lengthStep); - int totalValue = totalCruiseCache.decrement(samplingKey); + int totalValue = totalCruiseCache.decrementObservationNb(samplingKey); int zoneValue = 0; if (optionalZone.isPresent()) { String zoneKey = CruiseSamplingInternalCache.addPrefixKey(optionalZone.get().getId(), samplingKey); - zoneValue = zoneCache.decrement(zoneKey); + zoneValue = zoneCache.decrementObservationNb(zoneKey); } String operationKey = CruiseSamplingInternalCache.addPrefixKey(fishingOperationId, samplingKey); - int operationValue = operationCache.decrement(operationKey); + int operationValue = operationCache.decrementObservationNb(operationKey); if (log.isInfoEnabled()) { log.info("remove individual observation " + samplingKey + " ⇒ op " + operationValue + " / zone " + zoneValue + " / cruise " + totalValue); @@ -420,6 +516,86 @@ public class CruiseSamplingCache implements Closeable { } /** + * Suppression d'un prélèvement dans le cache. + * + * @param fishingOperation l'opération de pêche concernée + * @param species l'espèces concernée + * @param gender le sexe de l'échantillon (peut-être null) + * @param maturity la maturité de l'échantillon (peut-être null) + * @param lengthStep la classe de taille de l'échantillon + * @param samplingCode le code de prélèvement supprimé + */ + public void removeSampling(FishingOperation fishingOperation, + Species species, + CaracteristicQualitativeValue gender, + Boolean maturity, + float lengthStep, + String samplingCode) { + + Objects.requireNonNull(fishingOperation); + Objects.requireNonNull(species); + + Optional<Zone> optionalZone = tryFindZone(fishingOperation); + + removeSampling(fishingOperation.getIdAsInt(), optionalZone, species, gender, maturity, lengthStep, samplingCode); + } + + /** + * Suppression d'un prélèvement dans le cache. + * + * @param fishingOperationId l'identifiant de l'opération de pêche concernée + * @param optionalZone la zone (facultative) de l'opération de pêche concernée + * @param species l'espèces concernée + * @param gender le sexe de l'échantillon (peut-être null) + * @param maturity la maturité de l'échantillon (peut-être null) + * @param lengthStep la classe de taille de l'échantillon + * @param samplingCode le code de prélèvement supprimé + */ + public void removeSampling(Integer fishingOperationId, + Optional<Zone> optionalZone, + Species species, + CaracteristicQualitativeValue gender, + Boolean maturity, + float lengthStep, + String samplingCode) { + + Objects.requireNonNull(fishingOperationId); + Objects.requireNonNull(species); + + Optional<CalcifiedPiecesSamplingDefinition> cpsDefinitionOpt = getCalcifiedPiecesSamplingDefinition(species, maturity, lengthStep); + + if (cpsDefinitionOpt.isPresent()) { + + CalcifiedPiecesSamplingDefinition cpsDefinition = cpsDefinitionOpt.get(); + + if (!cpsDefinition.isSex()) { + gender = null; + } + String samplingKey = CruiseSamplingInternalCache.createSamplingKey(species, gender, maturity, lengthStep); + + int totalSamplingNb = totalCruiseCache.decrementSamplingNb(samplingKey); + + int zoneSamplingNb = 0; + if (optionalZone.isPresent()) { + String zoneKey = CruiseSamplingInternalCache.addPrefixKey(optionalZone.get().getId(), samplingKey); + zoneSamplingNb = zoneCache.decrementSamplingNb(zoneKey); + } + String operationKey = CruiseSamplingInternalCache.addPrefixKey(fishingOperationId, samplingKey); + + int operationSamplingNb = operationCache.decrementSamplingNb(operationKey); + + removeSamplingCode(species.getReferenceTaxonId(), samplingCode); + + if (log.isInfoEnabled()) { + log.info("remove Sampling " + samplingKey + " => op " + operationSamplingNb + " / zone " + zoneSamplingNb + " / cruise " + totalSamplingNb); + } + + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + fireResumeUpdated(event); + } + } + + /** * Suppression de toutes les observations individuelles du cache. * * @param fishingOperation l'opération de pêche concernée @@ -441,7 +617,7 @@ public class CruiseSamplingCache implements Closeable { log.info("Fishing operation: " + fishingOperationId + " removed from operationCache: " + operationCache.size()); } - removedKeys.forEach(totalCruiseCache::decrement); + removedKeys.forEach(totalCruiseCache::decrementObservationNb); if (log.isInfoEnabled()) { log.info("Fishing operation: " + fishingOperationId + " removed from totalCruiseCache: " + totalCruiseCache.size()); @@ -451,7 +627,7 @@ public class CruiseSamplingCache implements Closeable { if (optionalZone.isPresent()) { String zoneId = optionalZone.get().getId(); - removedKeys.forEach(key -> zoneCache.decrementIfExist(CruiseSamplingInternalCache.addPrefixKey(zoneId, key))); + removedKeys.forEach(key -> zoneCache.decrementObservationNbIfExist(CruiseSamplingInternalCache.addPrefixKey(zoneId, key))); if (log.isInfoEnabled()) { log.info("Fishing operation: " + fishingOperationId + " removed from zoneCache: " + zoneCache.size()); @@ -494,13 +670,18 @@ public class CruiseSamplingCache implements Closeable { .findFirst(); } - protected int getSamplingNumber(int value, int interval) { - return 1 + (value - 1) / interval; + protected void fireSamplingNeeded(SamplingEvent event) { + + SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); + if (samplingListeners.length > 0) { + + for (SamplingListener listener : samplingListeners) { + listener.samplingNeeded(event); + } + } } - protected void fireSamplingNeeded(float lengthStep, CaracteristicQualitativeValue gender, Boolean maturity, - CalcifiedPiecesSamplingDefinition cpsDefinition, - int samplingInterval, int totalValue, int zoneValue, int operationValue) { + protected void fireResumeUpdated(SamplingEvent event) { SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); if (samplingListeners.length > 0) { @@ -511,7 +692,7 @@ public class CruiseSamplingCache implements Closeable { SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, nbForCruise, nbForZone, nbForOperation); for (SamplingListener listener : samplingListeners) { - listener.samplingNeeded(event); + listener.resumeUpdated(event); } } } @@ -549,10 +730,25 @@ public class CruiseSamplingCache implements Closeable { } public int getNextSamplingCodeId(Integer speciesId) { - Integer highestSamplingCode = highestSamplingCodeBySpecies.getOrDefault(speciesId, 0); - int newHighestCode = highestSamplingCode + 1; - highestSamplingCodeBySpecies.put(speciesId, newHighestCode); - return newHighestCode; + return highestSamplingCodeBySpecies.getOrDefault(speciesId, 0) + 1; + } + + public int addSamplingCode(Integer speciesId, String samplingCode) { + String[] codeParts = samplingCode.split("#"); + Integer code = Integer.parseInt(codeParts[codeParts.length - 1]); + + // increment the highest sampling code if it is this code + return highestSamplingCodeBySpecies.compute(speciesId, + (key, highestSamplingCode) -> highestSamplingCode == null ? code : Math.max(highestSamplingCode, code)); + } + + public int removeSamplingCode(Integer speciesId, String samplingCode) { + String[] codeParts = samplingCode.split("#"); + Integer code = Integer.parseInt(codeParts[codeParts.length - 1]); + + // decrement the highest sampling code if it is this code + return highestSamplingCodeBySpecies.computeIfPresent(speciesId, + (key, highestSamplingCode) -> code.equals(highestSamplingCode) ? code - 1 : highestSamplingCode); } } -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 3e3c3fa5d27373760c73cecc119dced198f95e74 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 11:56:16 2016 +0200 gestion des prélèvements + affichage des prélèvements réels (refs #8177 refs #8152) --- .../frequency/IndividualObservationUICache.java | 155 +++++++++++++++++---- .../frequency/SpeciesFrequencyUIHandler.java | 37 +++-- 2 files changed, 156 insertions(+), 36 deletions(-) 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 b8a63e0..e99576f 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 @@ -122,15 +122,16 @@ public class IndividualObservationUICache implements Closeable { log.info("samplingNeeded for " + cpsDef); } - int nbForOperation = event.getNbForOperation(); - int nbForZone = event.getNbForZone(); - int nbForCruise = event.getNbForCruise(); - - Integer operationLimitation = cpsDef.getOperationLimitation(); - Integer zoneLimitation = cpsDef.getZoneLimitation(); - Integer maxByLenghtStep = cpsDef.getMaxByLenghtStep(); + int nbForOperation = event.getNbSamplingForOperation(); + int nbForZone = event.getNbSamplingForZone(); + int nbForCruise = event.getNbSamplingForCruise(); if (log.isInfoEnabled()) { + + Integer operationLimitation = cpsDef.getOperationLimitation(); + Integer zoneLimitation = cpsDef.getZoneLimitation(); + Integer maxByLenghtStep = cpsDef.getMaxByLenghtStep(); + log.info(String.format("nbForOperation: %d/%s - nbForZone: %d/%s - nbForCruise: %d/%s", nbForOperation, operationLimitation == null ? "∞" : operationLimitation, nbForZone, zoneLimitation == null ? "∞" : zoneLimitation, @@ -146,12 +147,28 @@ public class IndividualObservationUICache implements Closeable { log.info("showSamplingWarning " + showSamplingWarning); } ui.getSamplingWarningLabel().setVisible(showSamplingWarning); + } + + @Override + public void resumeUpdated(SamplingEvent event) { + + CalcifiedPiecesSamplingDefinition cpsDef = event.getCpsDef(); + if (log.isInfoEnabled()) { + log.info("samplingNeeded for " + cpsDef); + } + + int nbForOperation = event.getNbSamplingForOperation(); + int nbForZone = event.getNbSamplingForZone(); + int nbForCruise = event.getNbSamplingForCruise(); - String nbForOperationLabel = getLabelForSamplingNumber(operationValueUpperMax, nbForOperation, operationLimitation); - String nbForZoneLabel = getLabelForSamplingNumber(zoneValueUpperMax, nbForZone, zoneLimitation); - String nbForCruiseLabel = getLabelForSamplingNumber(cruiseValueUpperMax, nbForCruise, maxByLenghtStep); +// boolean operationValueUpperMax = CalcifiedPiecesSamplingDefinitions.isOperationValueUpperMax(cpsDef, nbForOperation); +// boolean zoneValueUpperMax = CalcifiedPiecesSamplingDefinitions.isZoneValueUpperMax(cpsDef, nbForZone); +// boolean cruiseValueUpperMax = CalcifiedPiecesSamplingDefinitions.isCruiseValueUpperMax(cpsDef, nbForCruise); + + String nbForOperationLabel = getLabelForSamplingNumber(nbForOperation, cpsDef.getOperationLimitation()); + String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, cpsDef.getZoneLimitation()); + String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, cpsDef.getMaxByLenghtStep()); - //TODO add mauturity String key = event.getLengthStep() + " " + uiModel.getLengthStepCaracteristicUnit(); if (event.getGender() != null) { key += " " + event.getGender().getDescription(); @@ -164,18 +181,10 @@ public class IndividualObservationUICache implements Closeable { } } ui.getSamplingResumeLabel().setText(t("tutti.editSpeciesFrequencies.samplingNeeded.resume", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel)); - } - String getLabelForSamplingNumber(boolean valueUpperMax, int value, Integer max) { - String result; - if (valueUpperMax) { - result = t("tutti.editSpeciesFrequencies.samplingNeeded.max"); - } else { - // min à 0 (pour le cas où on ne soit pas dans une zone (pas de strate ou de sous strate définie)) - result = String.valueOf(Math.max(0, value - 1)); - } - return result; + String getLabelForSamplingNumber(int value, Integer max) { + return value + "(" + max + ")"; } }; @@ -215,8 +224,19 @@ public class IndividualObservationUICache implements Closeable { */ public void increments(IndividualObservationBatchRowModel row) { - increments(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize()); + incrementsObservationNb(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize(), Optional.ofNullable(row.getSamplingCode())); + + } + /** + * Ajoute une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + */ + public void incrementsObservationNb(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + incrementsObservationNb(gender, maturityQualitativeValue, lengthStep, Optional.empty()); } /** @@ -225,8 +245,12 @@ public class IndividualObservationUICache implements Closeable { * @param gender le sexe * @param maturityQualitativeValue l'état de maturité * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement ajouté s'il y en a un */ - public void increments(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + public void incrementsObservationNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + Optional<String> samplingCode) { if (!on) { if (log.isDebugEnabled()) { @@ -241,6 +265,39 @@ public class IndividualObservationUICache implements Closeable { gender, maturity, uiModel.getLengthStep(lengthStep)); + + if (samplingCode.isPresent()) { + incrementsSamplingNb(gender, maturityQualitativeValue, lengthStep, samplingCode.get()); + } + } + + /** + * Ajoute une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement ajouté + */ + public void incrementsSamplingNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + String samplingCode) { + + if (!on) { + if (log.isDebugEnabled()) { + log.debug("Cache is off, skip increments sampling in cache."); + } + return; + } + + Boolean maturity = samplingCache.get().getMaturity(uiModel.getBatch().getSpecies().getReferenceTaxonId(), maturityQualitativeValue); + samplingCache.get().addSampling(fishingOperation, + species, + gender, + maturity, + uiModel.getLengthStep(lengthStep), + samplingCode); } /** @@ -250,8 +307,20 @@ public class IndividualObservationUICache implements Closeable { */ public void decrements(IndividualObservationBatchRowModel row) { - decrements(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize()); + decrementsObservationNb(row.getGender(sexCaracteristic), row.getMaturityState(), row.getSize(), Optional.ofNullable(row.getSamplingCode())); + + } + + /** + * Retire une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + */ + public void decrementsObservationNb(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + decrementsObservationNb(gender, maturityQualitativeValue, lengthStep, Optional.empty()); } /** @@ -260,8 +329,12 @@ public class IndividualObservationUICache implements Closeable { * @param gender le sexe * @param maturityQualitativeValue l'état de maturité * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement supprimée */ - public void decrements(CaracteristicQualitativeValue gender, Optional<CaracteristicQualitativeValue> maturityQualitativeValue, float lengthStep) { + public void decrementsObservationNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + Optional<String> samplingCode) { if (!on) { if (log.isDebugEnabled()) { @@ -277,6 +350,38 @@ public class IndividualObservationUICache implements Closeable { maturity, uiModel.getLengthStep(lengthStep)); + if (samplingCode.isPresent()) { + decrementsSamplingNb(gender, maturityQualitativeValue, uiModel.getLengthStep(lengthStep), samplingCode.get()); + } + } + + /** + * Ajoute une observation individuelle via ses composantes (sexe, maturité, classe de taille) dans le cache. + * + * @param gender le sexe + * @param maturityQualitativeValue l'état de maturité + * @param lengthStep la classe de taille + * @param samplingCode le code de prélèvement supprimé + */ + public void decrementsSamplingNb(CaracteristicQualitativeValue gender, + Optional<CaracteristicQualitativeValue> maturityQualitativeValue, + float lengthStep, + String samplingCode) { + + if (!on) { + if (log.isDebugEnabled()) { + log.debug("Cache is off, skip increments sampling in cache."); + } + return; + } + + Boolean maturity = samplingCache.get().getMaturity(uiModel.getBatch().getSpecies().getReferenceTaxonId(), maturityQualitativeValue); + samplingCache.get().removeSampling(fishingOperation, + species, + gender, + maturity, + uiModel.getLengthStep(lengthStep), + samplingCode); } /** 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 567eb03..0999b24 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 @@ -50,6 +50,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellRenderer; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.EditSpeciesBatchPanelUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; @@ -230,10 +231,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Float newValue = (Float) evt.getNewValue(); if (oldValue != null) { - individualObservationUICache.decrements(gender, maturity, oldValue); + individualObservationUICache.decrementsObservationNb(gender, maturity, oldValue, Optional.ofNullable(row.getSamplingCode())); } if (newValue != null) { - individualObservationUICache.increments(gender, maturity, newValue); + individualObservationUICache.incrementsObservationNb(gender, maturity, newValue, Optional.ofNullable(row.getSamplingCode())); } // we only update the frequencies if the row is valid @@ -278,25 +279,43 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci CaracteristicMap oldValue = (CaracteristicMap) evt.getOldValue(); CaracteristicMap newValue = (CaracteristicMap) evt.getNewValue(); + 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.decrements(gender, oldMaturity, row.getSize()); - individualObservationUICache.increments(gender, newMaturity, row.getSize()); + 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.decrements(oldGender, maturity, row.getSize()); - individualObservationUICache.increments(newGender, maturity, row.getSize()); + individualObservationUICache.decrementsObservationNb(oldGender, maturity, row.getSize()); + individualObservationUICache.incrementsObservationNb(newGender, maturity, row.getSize(), Optional.ofNullable(row.getSamplingCode())); } } + 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); + } + } + // if the row's valid state changes, then remove or readd it to the frequencies if (!getModel().isRowComputationInProgress() && IndividualObservationBatchRowModel.PROPERTY_VALID.equals(propertyName)) { @@ -306,14 +325,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (oldValue && getModel().mustCopyIndividualObservationSize()) { updateFrequencyRowsNumbers(row.getSize(), null); - individualObservationUICache.decrements(gender, maturity, row.getSize()); } if (newValue) { if (getModel().mustCopyIndividualObservationSize()) { updateFrequencyRowsNumbers(null, row.getSize()); - if (row.withSize()) { - individualObservationUICache.increments(gender, maturity, row.getSize()); - } } if (getModel().mustCopyIndividualObservationWeight()) { updateFrequencyRowsWeights(row.getSize(), row.getWeight()); -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 6611c706e2efa2c8a6276474f09917f3ae5d215d Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 15:07:16 2016 +0200 décoration pour le résumé (refs #8152) --- .../fr/ifremer/tutti/service/DecoratorService.java | 2 ++ .../service/sampling/CruiseSamplingCache.java | 6 ++--- .../tutti/service/sampling/SamplingEvent.java | 13 ++++++--- .../frequency/IndividualObservationUICache.java | 31 +++++++++++----------- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 3 ++- 6 files changed, 33 insertions(+), 23 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index 962c5b3..c085060 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; 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.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -121,6 +122,7 @@ public class DecoratorService extends AbstractTuttiService { registerTuttiDecorator(Cruise.class, "${name}$s", SEPARATOR, " - "); registerTuttiDecorator(TuttiProtocol.class, "${name}$s", SEPARATOR, " - "); registerTuttiDecorator(Rtp.class, "${a}$s#${b}$s", SEPARATOR, " - "); + registerTuttiDecorator(Zone.class, "${label}$s", SEPARATOR, " - "); registerDecorator(new FishingOperationDecorator()); registerTuttiDecorator(FishingOperation.class, FILE_NAME_COMPATIBLE, "${stationNumber}$s#${fishingOperationNumber}$s#${multirigAggregation}$s#${gearShootingStartDate}$td%4$tm%4$tY", SEPARATOR, "-"); registerTuttiDecorator(Gear.class, "${label}$s#${name}$s", SEPARATOR, " - "); 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 55122a0..a64becc 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 @@ -297,7 +297,7 @@ public class CruiseSamplingCache implements Closeable { log.info("add Individual Observation " + samplingKey + " => op " + operationValue + " / zone " + zoneValue + " / cruise " + totalValue); } - SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, optionalZone, totalSamplingNb, zoneSamplingNb, operationSamplingNb); if (!isLoading() && (totalValue == 1 || totalValue % samplingInterval == 1)) { if (log.isInfoEnabled()) { @@ -387,7 +387,7 @@ public class CruiseSamplingCache implements Closeable { log.info("add Sampling " + samplingKey + " => op " + operationSamplingNb + " / zone " + zoneSamplingNb + " / cruise " + totalSamplingNb); } - SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, optionalZone, totalSamplingNb, zoneSamplingNb, operationSamplingNb); fireResumeUpdated(event); } } @@ -590,7 +590,7 @@ public class CruiseSamplingCache implements Closeable { log.info("remove Sampling " + samplingKey + " => op " + operationSamplingNb + " / zone " + zoneSamplingNb + " / cruise " + totalSamplingNb); } - SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, totalSamplingNb, zoneSamplingNb, operationSamplingNb); + SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, optionalZone, totalSamplingNb, zoneSamplingNb, operationSamplingNb); fireResumeUpdated(event); } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java index c81b726..dc53227 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/sampling/SamplingEvent.java @@ -25,9 +25,11 @@ package fr.ifremer.tutti.service.sampling; */ import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import java.util.EventObject; +import java.util.Optional; /** * @author Kevin Morin (Code Lutin) @@ -43,6 +45,8 @@ public class SamplingEvent extends EventObject { protected final CalcifiedPiecesSamplingDefinition cpsDef; + protected final Optional<Zone> zone; + protected final int nbSamplingForCruise; protected final int nbSamplingForZone; @@ -50,12 +54,13 @@ public class SamplingEvent extends EventObject { protected final int nbSamplingForOperation; public SamplingEvent(CruiseSamplingCache source, float lengthStep, CaracteristicQualitativeValue gender, Boolean maturity, - CalcifiedPiecesSamplingDefinition cpsDef, int nbSamplingForCruise, int nbSamplingForZone, int nbSamplingForOperation) { + CalcifiedPiecesSamplingDefinition cpsDef, Optional<Zone> zone, int nbSamplingForCruise, int nbSamplingForZone, int nbSamplingForOperation) { super(source); this.lengthStep = lengthStep; this.gender = gender; this.maturity = maturity; this.cpsDef = cpsDef; + this.zone = zone; this.nbSamplingForCruise = nbSamplingForCruise; this.nbSamplingForZone = nbSamplingForZone; this.nbSamplingForOperation = nbSamplingForOperation; @@ -73,12 +78,14 @@ public class SamplingEvent extends EventObject { return maturity; } - - public CalcifiedPiecesSamplingDefinition getCpsDef() { return cpsDef; } + public Optional<Zone> getZone() { + return zone; + } + public int getNbSamplingForCruise() { return nbSamplingForCruise; } 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 e99576f..5726658 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 @@ -26,10 +26,11 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinition; -import fr.ifremer.tutti.persistence.entities.protocol.CalcifiedPiecesSamplingDefinitions; +import fr.ifremer.tutti.persistence.entities.protocol.Zone; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.sampling.CruiseSamplingCache; import fr.ifremer.tutti.service.sampling.SamplingEvent; import fr.ifremer.tutti.service.sampling.SamplingListener; @@ -37,6 +38,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -138,15 +140,7 @@ public class IndividualObservationUICache implements Closeable { nbForCruise, maxByLenghtStep == null ? "∞" : maxByLenghtStep)); } - boolean operationValueUpperMax = CalcifiedPiecesSamplingDefinitions.isOperationValueUpperMax(cpsDef, nbForOperation); - boolean zoneValueUpperMax = CalcifiedPiecesSamplingDefinitions.isZoneValueUpperMax(cpsDef, nbForZone); - boolean cruiseValueUpperMax = CalcifiedPiecesSamplingDefinitions.isCruiseValueUpperMax(cpsDef, nbForCruise); - - boolean showSamplingWarning = !operationValueUpperMax && !zoneValueUpperMax && !cruiseValueUpperMax; - if (log.isInfoEnabled()) { - log.info("showSamplingWarning " + showSamplingWarning); - } - ui.getSamplingWarningLabel().setVisible(showSamplingWarning); + ui.getSamplingWarningLabel().setVisible(true); } @Override @@ -161,15 +155,12 @@ public class IndividualObservationUICache implements Closeable { int nbForZone = event.getNbSamplingForZone(); int nbForCruise = event.getNbSamplingForCruise(); -// boolean operationValueUpperMax = CalcifiedPiecesSamplingDefinitions.isOperationValueUpperMax(cpsDef, nbForOperation); -// boolean zoneValueUpperMax = CalcifiedPiecesSamplingDefinitions.isZoneValueUpperMax(cpsDef, nbForZone); -// boolean cruiseValueUpperMax = CalcifiedPiecesSamplingDefinitions.isCruiseValueUpperMax(cpsDef, nbForCruise); - String nbForOperationLabel = getLabelForSamplingNumber(nbForOperation, cpsDef.getOperationLimitation()); String nbForZoneLabel = getLabelForSamplingNumber(nbForZone, cpsDef.getZoneLimitation()); String nbForCruiseLabel = getLabelForSamplingNumber(nbForCruise, cpsDef.getMaxByLenghtStep()); - String key = event.getLengthStep() + " " + uiModel.getLengthStepCaracteristicUnit(); + Decorator<Species> speciesDecorator = ui.getHandler().getDecorator(Species.class, DecoratorService.WITH_SURVEY_CODE); + String key = speciesDecorator.toString(species) + " " + event.getLengthStep() + " " + uiModel.getLengthStepCaracteristicUnit(); if (event.getGender() != null) { key += " " + event.getGender().getDescription(); } @@ -180,7 +171,15 @@ public class IndividualObservationUICache implements Closeable { key += " " + t("tutti.editSpeciesFrequencies.samplingNeeded.immature"); } } - ui.getSamplingResumeLabel().setText(t("tutti.editSpeciesFrequencies.samplingNeeded.resume", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel)); + String resume; + if (event.getZone().isPresent()) { + Decorator<Zone> zoneDecorator = ui.getHandler().getDecorator(Zone.class, null); + String zone = zoneDecorator.toString(event.getZone().get()); + resume = t("tutti.editSpeciesFrequencies.samplingNeeded.resume", key, nbForOperationLabel, zone, nbForZoneLabel, nbForCruiseLabel); + } else { + resume = t("tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone", key, nbForOperationLabel, nbForZoneLabel, nbForCruiseLabel); + } + ui.getSamplingResumeLabel().setText(resume); } String getLabelForSamplingNumber(int value, Integer max) { 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 25ddb67..0a401a9 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 @@ -1642,6 +1642,7 @@ tutti.editSpeciesFrequencies.samplingNeeded.immature= tutti.editSpeciesFrequencies.samplingNeeded.mature= tutti.editSpeciesFrequencies.samplingNeeded.max= tutti.editSpeciesFrequencies.samplingNeeded.resume= +tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone= tutti.editSpeciesFrequencies.samplingNeeded.warning= tutti.editSpeciesFrequencies.simpleCountingAndFrequencies= tutti.editSpeciesFrequencies.table.header.lengthStep= 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 91916e8..3232776 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 @@ -1527,7 +1527,8 @@ tutti.editSpeciesFrequencies.logTable.removeRow.confirm.title=Suppression d'une tutti.editSpeciesFrequencies.samplingNeeded.immature=Immature tutti.editSpeciesFrequencies.samplingNeeded.mature=Mature tutti.editSpeciesFrequencies.samplingNeeded.max=max -tutti.editSpeciesFrequencies.samplingNeeded.resume=<html><body><strong>%s</strong> \: trait \: %s | zone \: %s | campagne \: %s +tutti.editSpeciesFrequencies.samplingNeeded.resume=<html><body><strong>%s</strong> \: Trait \: %s | %s \: %s | Campagne \: %s +tutti.editSpeciesFrequencies.samplingNeeded.resume.noZone=<html><body><strong>%s</strong> \: Trait \: %s | (pas dans une zone) | Campagne \: %s tutti.editSpeciesFrequencies.samplingNeeded.warning=<html><body><strong>Prélevez les pièces calcifiées \!</body></html> tutti.editSpeciesFrequencies.simpleCountingAndFrequencies=Des mensurations ont été saisies dans le tableau. Saisir un simple dénombrement les effacera. tutti.editSpeciesFrequencies.table.header.lengthStep=Classe de taille -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 10d8c6a7e13ce1398ea090d16acd5587a7cd1d31 Author: Kevin Morin <morin@codelutin.com> Date: Tue Mar 29 16:56:35 2016 +0200 augmentation de la taille des messages de prélèvement + limite infinie au lieu de nulle (fixes #8152) --- .../catches/species/frequency/IndividualObservationUICache.java | 3 ++- .../operation/catches/species/frequency/SpeciesFrequencyUI.jcss | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) 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 5726658..2f5762b 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 @@ -183,7 +183,8 @@ public class IndividualObservationUICache implements Closeable { } String getLabelForSamplingNumber(int value, Integer max) { - return value + "(" + max + ")"; + Decorator<Integer> valueDecorator = ui.getHandler().getDecorator(Integer.class, DecoratorService.NULL_INFINITE); + return valueDecorator.toString(value) + "(" + valueDecorator.toString(max) + ")"; } }; 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 2220245..d8a3244 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 @@ -400,13 +400,14 @@ ComputableDataEditor { foreground: {handler.getConfig().getColorHighlightInfoForeground()}; background: {handler.getConfig().getColorHighlightInfoBackground()}; horizontalAlignment: {SwingConstants.CENTER}; - font-size: 15; - border: {BorderFactory.createEmptyBorder(5, 10, 5, 10)}; + font-size: 16; + border: {BorderFactory.createEmptyBorder(3, 10, 5, 10)}; } #samplingResumeLabel { horizontalAlignment: {SwingConstants.CENTER}; - border: {BorderFactory.createEmptyBorder(5, 10, 5, 10)}; + font-size: 15; + border: {BorderFactory.createEmptyBorder(3, 10, 5, 10)}; } #dataFieldPanel { -- 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/8177 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 3be764dd2ea8cf0764d90c6454f151db5732c4b9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Mar 31 16:43:43 2016 +0200 fix merge --- .../fr/ifremer/tutti/service/sampling/CruiseSamplingCache.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) 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 a64becc..93eb2ba 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 @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.service.samplingCache; +package fr.ifremer.tutti.service.sampling; /* * #%L @@ -686,11 +686,6 @@ public class CruiseSamplingCache implements Closeable { SamplingListener[] samplingListeners = listeners.getListeners(SamplingListener.class); if (samplingListeners.length > 0) { - int nbForCruise = getSamplingNumber(totalValue, samplingInterval); - int nbForZone = getSamplingNumber(zoneValue, samplingInterval); - int nbForOperation = getSamplingNumber(operationValue, samplingInterval); - - SamplingEvent event = new SamplingEvent(this, lengthStep, gender, maturity, cpsDefinition, nbForCruise, nbForZone, nbForOperation); for (SamplingListener listener : samplingListeners) { listener.resumeUpdated(event); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm