Author: tchemit Date: 2014-02-07 16:31:18 +0100 (Fri, 07 Feb 2014) New Revision: 1578 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1578 Log: fixes #4360: [CAPTURE] probl?\195?\168me ?\195?\169l?\195?\169vation des poids Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightCleaningService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2014-02-07 13:43:12 UTC (rev 1577) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/TuttiEntities.java 2014-02-07 15:31:18 UTC (rev 1578) @@ -32,7 +32,6 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; import com.google.common.collect.Sets; -import org.nuiton.jaxx.application.ApplicationDataUtil; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; @@ -43,6 +42,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.cfg.Environment; +import org.nuiton.jaxx.application.ApplicationDataUtil; import java.io.File; import java.math.BigDecimal; @@ -513,4 +513,47 @@ float result = sumB.abs(MATH_CONTEXT_4_DIGIT).floatValue(); return result; } + + /** + * Compare two weights with rounding them to kilograms. + * + * @param v0 first weight to compare + * @param v1 second weight to compare + * @return 1 if v0 > v1, -1 if v0 < v1, 0 if v0 == v1 + */ + public static int compareWeights(float v0, float v1) { + v0 = roundKiloGram(v0); + v1 = roundKiloGram(v1); + float delta = v0 - v1; + int result; + if (delta > 0.00001) { + // v0 > v1 + result = 1; + } else if (delta < -0.0001f) { + // v0 < v1 + result = -1; + } else { + // v0 == v1 + result = 0; + } + return result; + } + + public static boolean isSmallerWeight(float v0, float v1) { + return compareWeights(v0, v1) < 0; + } + + public static boolean isGreaterWeight(float v0, float v1) { + return compareWeights(v0, v1) > 0; + } + + public static boolean isEqualWeight(float v0, float v1) { + return compareWeights(v0, v1) == 0; + } + + public static boolean isNotEqualWeight(float v0, float v1) { + return compareWeights(v0, v1) != 0; + } } + + Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightCleaningService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightCleaningService.java 2014-02-07 13:43:12 UTC (rev 1577) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightCleaningService.java 2014-02-07 15:31:18 UTC (rev 1578) @@ -30,7 +30,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; -import fr.ifremer.tutti.type.WeightUnit; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; @@ -46,7 +46,7 @@ import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiServiceContext; -import org.apache.commons.lang3.ObjectUtils; +import fr.ifremer.tutti.type.WeightUnit; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -483,13 +483,13 @@ Float sampleCategoryWeight = batch.getSampleCategoryWeight(); Float parentSampleCategoryWeight = parentBatch.getSampleCategoryWeight(); - if (sampleCategoryWeight != null && ObjectUtils.equals(parentSampleCategoryWeight, sampleCategoryWeight)) { + if (sampleCategoryWeight != null && TuttiEntities.isEqualWeight(parentSampleCategoryWeight, sampleCategoryWeight)) { result = t("tutti.service.operations.cleanWeights.error.redundant.sampleCategoryWeight", - weightUnit.fromEntity(sampleCategoryWeight), - weightUnit.getShortLabel(), - getCategoryLabel(batch), - getCategoryLabel(parentBatch) + weightUnit.fromEntity(sampleCategoryWeight), + weightUnit.getShortLabel(), + getCategoryLabel(batch), + getCategoryLabel(parentBatch) ); } @@ -514,11 +514,11 @@ Float frequenciesWeigth = persistenceService.countFrequenciesWeight(frequencies, true); - if (ObjectUtils.equals(weight, frequenciesWeigth)) { + if (TuttiEntities.isEqualWeight(weight, frequenciesWeigth)) { result = t("tutti.service.operations.cleanWeights.error.redundant.frequencyWeight", - weightUnit.fromEntity(weight), - weightUnit.getShortLabel(), - getCategoryLabel(batch)); + weightUnit.fromEntity(weight), + weightUnit.getShortLabel(), + getCategoryLabel(batch)); } } @@ -535,12 +535,12 @@ // on a leaf, check if weight is not = to the finest category weight Float weight = batch.getWeight(); Float sampleCategoryWeight = batch.getSampleCategoryWeight(); - if (weight != null && ObjectUtils.equals(weight, sampleCategoryWeight)) { + if (weight != null && TuttiEntities.isEqualWeight(weight, sampleCategoryWeight)) { result = t("tutti.service.operations.cleanWeights.error.redundant.weight", - weightUnit.fromEntity(weight), - weightUnit.getShortLabel(), - getCategoryLabel(batch)); + weightUnit.fromEntity(weight), + weightUnit.getShortLabel(), + getCategoryLabel(batch)); } return result; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java 2014-02-07 13:43:12 UTC (rev 1577) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/WeightComputingService.java 2014-02-07 15:31:18 UTC (rev 1578) @@ -26,7 +26,6 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import org.nuiton.jaxx.application.ApplicationBusinessException; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; @@ -47,6 +46,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.validator.NuitonValidatorResult; import java.util.List; @@ -433,7 +433,7 @@ if (categoryWeight == null) { batch.setSampleCategoryComputedWeight(TuttiEntities.roundKiloGram(sum)); - } else if (categoryWeight < sum) { + } else if (TuttiEntities.isSmallerWeight(categoryWeight, sum)) { String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); throw new TuttiWeightComputingException( t("tutti.service.operations.computeWeights.error.species.incoherentParentCategoryWeight", @@ -479,7 +479,7 @@ // throw new TuttiBusinessException(t("tutti.service.operations.computeWeights.error.incoherentRowWeightCategory")); } else if (rowWeight != null && frequencyWeight != null - && !rowWeight.equals(frequencyWeight)) { + && TuttiEntities.isNotEqualWeight(rowWeight, frequencyWeight)) { String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); @@ -500,11 +500,11 @@ result = frequencyWeight; } else if (frequencyWeight != null - && !frequencyWeight.equals(categoryWeight)) { + && TuttiEntities.isNotEqualWeight(frequencyWeight, categoryWeight)) { // if the weight of the frequencies is different from the category // weight, then set the weight of the sample - if (frequencyWeight > categoryWeight) { + if (TuttiEntities.isGreaterWeight(frequencyWeight, categoryWeight)) { String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); @@ -620,7 +620,7 @@ if (categoryWeight == null) { batch.setSampleCategoryComputedWeight(TuttiEntities.roundKiloGram(sum)); - } else if (categoryWeight < sum) { + } else if (TuttiEntities.isSmallerWeight(categoryWeight, sum)) { String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); @@ -669,7 +669,7 @@ // throw new TuttiBusinessException(t("tutti.service.operations.computeWeights.error.incoherentRowWeightCategory")); } else if (rowWeight != null && frequencyWeight != null - && !rowWeight.equals(frequencyWeight)) { + && TuttiEntities.isNotEqualWeight(rowWeight, frequencyWeight)) { String categoryLabel = getCategoryLabel(batch.getSampleCategoryId()); @@ -691,11 +691,11 @@ result = frequencyWeight; } else if (frequencyWeight != null - && !frequencyWeight.equals(categoryWeight)) { + && TuttiEntities.isNotEqualWeight(frequencyWeight, categoryWeight)) { // if the weight of the frequencies is different from the category // weight, then set the weight of the sample - if (frequencyWeight > categoryWeight) { + if (TuttiEntities.isGreaterWeight(frequencyWeight, categoryWeight)) { String categoryLabel = getCategoryLabel(batch.getSampleCategoryId());
participants (1)
-
tchemit@users.forge.codelutin.com