This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.4.x in repository tutti. See http://git.codelutin.com/tutti.git commit 4b366c3332a849c01ff26a82de65b38ae0bfffbc Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Feb 23 16:31:46 2016 +0100 Début de correction mais il me faut une confirmation de Vincent sur le sujet --- .../tutti/service/genericformat/csv/CatchRow.java | 14 ++ .../producer/CsvProducerForCatch.java | 33 +++ .../GenericFormatExportServiceAno7992Test.java | 13 +- .../resources/genericFormat/ano7992.tuttiProtocol | 227 +++++++++++++++++++++ 4 files changed, 283 insertions(+), 4 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/CatchRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/CatchRow.java index f5fb734..0cd7aca 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/CatchRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/CatchRow.java @@ -103,6 +103,8 @@ public class CatchRow extends RowWithOperationContextSupport { protected Float frequencyWeight; + protected Float computedFrequencyTotalWeight; + protected Integer frequencyRankOrder; public void setBenthos(boolean benthos) { @@ -129,6 +131,10 @@ public class CatchRow extends RowWithOperationContextSupport { this.batchNumberComputed = batchNumberComputed; } + public void setComputedFrequencyTotalWeight(Float computedFrequencyTotalWeight) { + this.computedFrequencyTotalWeight = computedFrequencyTotalWeight; + } + public void addSampleCategory(ExportSampleCategory sampleCategory) { int order = sampleCategory.getCategoryDef().getOrder(); while (this.sampleCategory.size() <= order) { @@ -188,6 +194,10 @@ public class CatchRow extends RowWithOperationContextSupport { return finalRaisingFactor; } + public boolean isFrequencyWithWeight() { + return frequencyLengthStepCaracteristic!=null && frequencyWeight!=null; + } + public Caracteristic getFrequencyLengthStepCaracteristic() { return frequencyLengthStepCaracteristic; } @@ -200,6 +210,10 @@ public class CatchRow extends RowWithOperationContextSupport { return frequencyWeight; } + public Float getComputedFrequencyTotalWeight() { + return computedFrequencyTotalWeight; + } + public Species getSpecies() { return species; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForCatch.java index 992a40d..f5b81ca 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/producer/CsvProducerForCatch.java @@ -46,7 +46,9 @@ import org.apache.commons.logging.LogFactory; import java.io.Serializable; import java.nio.file.Path; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; /** * Created on 2/6/15. @@ -303,19 +305,28 @@ public class CsvProducerForCatch extends CsvProducer<CatchRow, CatchModel> { } } + float frequencyWeights = 0f; + Set<CatchRow> frequencyRows = new LinkedHashSet<>(); for (SpeciesBatchFrequency batchFrequency : speciesBatchFrequency) { CatchRow row = currentRow.copy(); row.setFrequency(batchFrequency); + frequencyRows.add(row); rows.add(row); if (!withNoWeightOnFrequencies) { // use concrete frequency weight referenceWeight = batchFrequency.getWeight(); + frequencyWeights+= referenceWeight; } setRaisingFactor(row, totalBatchWeight, referenceWeight); } + + if (!withNoWeightOnFrequencies) { + float computedFrequencyTotalWeight = frequencyWeights; + frequencyRows.forEach(catchRow -> catchRow.setComputedFrequencyTotalWeight(computedFrequencyTotalWeight)); + } } } else { @@ -430,19 +441,29 @@ public class CsvProducerForCatch extends CsvProducer<CatchRow, CatchModel> { } } + float frequencyWeights = 0f; + Set<CatchRow> frequencyRows = new LinkedHashSet<>(); for (BenthosBatchFrequency batchFrequency : benthosBatchFrequency) { CatchRow row = currentRow.copy(); row.setFrequency(batchFrequency); + frequencyRows.add(row); rows.add(row); if (!withNoWeightOnFrequencies) { // use concrete frequency weight referenceWeight = batchFrequency.getWeight(); + frequencyWeights+=referenceWeight; } setRaisingFactor(row, totalBatchWeight, referenceWeight); } + + if (!withNoWeightOnFrequencies) { + float computedFrequencyTotalWeight = frequencyWeights; + frequencyRows.forEach(catchRow -> catchRow.setComputedFrequencyTotalWeight(computedFrequencyTotalWeight)); + } + } } else { @@ -513,6 +534,18 @@ public class CsvProducerForCatch extends CsvProducer<CatchRow, CatchModel> { } } + if (row.isFrequencyWithWeight()) { + + Float frequencyWeight = row.getFrequencyWeight(); + Float computedFrequencyTotalWeight = row.getComputedFrequencyTotalWeight(); + float currentRate = computedFrequencyTotalWeight / frequencyWeight; + if (Weights.isNotEqualWeight(1.0f, currentRate)) { + + // the only case which can change the final rate + finalRaisingFactor *= currentRate; + } + + } return finalRaisingFactor; } diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportServiceAno7992Test.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportServiceAno7992Test.java index 2455ee0..bfc1499 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportServiceAno7992Test.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/genericformat/GenericFormatExportServiceAno7992Test.java @@ -50,9 +50,13 @@ public class GenericFormatExportServiceAno7992Test { public static final ServiceDbResource dbResource = ServiceDbResource.readDb("dbAno7992"); public static final String CATCH_FILE_CONTENT - = "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Code_Taxon;Code_Espece_Campagne;Nom_Scientifique;Benthos;Lot_A_Confirmer;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Commentaire_V_HV;Class_Tri;Num_Ordre_Class_Tri_H2;Tot_Class_Tri;Ech_Class_Tri;Type_Volume_Poids_Class_Tri;Unite_Volume_Poids_Class_Tri;Commentaire_Class_Tri;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Commentaire [...] - + "2015;Campagne EVHOE;;T0696;1;1;949;NEPH-NOR;Nephrops norvegicus;N;N;Vrac;1;3.2;;Poids;kg;;NA;;;;;kg;;Male;1;2.54;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;;;;;;;;;?;2.54;2.519685;2.3188405;CAM-EVHOE;311;100004;NA;;300;100005;NA;;NA;\n" - + "2015;Campagne EVHOE;;T0696;1;1;949;NEPH-NOR;Nephrops norvegicus;N;N;Vrac;1;3.2;;Poids;kg;;NA;;;;;kg;;Femelle;2;0.22;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;;;;;;;;;?;0.22;29.09091;2.3188405;CAM-EVHOE;311;100004;NA;;301;100006;NA;;NA;\n"; + = "Annee;Serie;Serie_Partielle;Code_Station;Id_Operation;Poche;Code_Taxon;Code_Espece_Campagne;Nom_Scientifique;Benthos;Lot_A_Confirmer;V_HV;Num_Ordre_V_HV_H2;Tot_V_HV;Ech_V_HV;Type_Volume_Poids_V_HV;Unite_Volume_Poids_V_HV;Commentaire_V_HV;Class_Tri;Num_Ordre_Class_Tri_H2;Tot_Class_Tri;Ech_Class_Tri;Type_Volume_Poids_Class_Tri;Unite_Volume_Poids_Class_Tri;Commentaire_Class_Tri;Sexe;Num_Ordre_Sexe_H2;Tot_Sexe;Ech_Sexe;Type_Volume_Poids_Sexe;Unite_Volume_Poids_Sexe;Commentaire [...] + "2015;Campagne EVHOE;;T0696;1;1;949;NEPH-NOR;Nephrops norvegicus;N;N;Vrac;1;3.2;;Poids;kg;;NA;;;;;kg;;Male;1;2.54;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;;;;;;;;;?;2.54;1.2989074;1.1953713;CAM-EVHOE;311;100004;NA;;300;100005;NA;;NA;\n" + + "2015;Campagne EVHOE;;T0696;1;1;949;NEPH-NOR;Nephrops norvegicus;N;N;Vrac;1;3.2;;Poids;kg;;NA;;;;;kg;;Femelle;2;0.22;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;;;;;;;;;?;0.22;14.996477;1.1953713;CAM-EVHOE;311;100004;NA;;301;100006;NA;;NA;\n" + + "2015;Campagne EVHOE;;A;2;1;1662;TRAC-TRA;Trachurus trachurus;N;N;Vrac;1;100.0;;Poids;kg;;G - Gros;1;30.0;;Poids;kg;;Male;1;10.0;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;;;;;;;;;?;10.0;10.0;4.0;CAM-EVHOE;311;100020;305;100021;300;100023;NA;;NA;\n" + + "2015;Campagne EVHOE;;A;2;1;1662;TRAC-TRA;Trachurus trachurus;N;N;Vrac;1;100.0;;Poids;kg;;G - Gros;1;30.0;;Poids;kg;;Femelle;2;5.0;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;41;Poids déterminé par calcul - produit/lot - totale - Inconnue;10.0;1;2.0;kg;;1;N;2.0;50.0;10.0;CAM-EVHOE;311;100020;305;100021;301;100024;NA;;NA;\n" + + "2015;Campagne EVHOE;;A;2;1;1662;TRAC-TRA;Trachurus trachurus;N;N;Vrac;1;100.0;;Poids;kg;;G - Gros;1;30.0;;Poids;kg;;Femelle;2;5.0;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;41;Poids déterminé par calcul - produit/lot - totale - Inconnue;11.0;2;3.0;kg;;1;N;3.0;33.333332;6.6666665;CAM-EVHOE;311;100020;305;100021;301;100024;NA;;NA;\n" + + "2015;Campagne EVHOE;;A;2;1;1662;TRAC-TRA;Trachurus trachurus;N;N;Vrac;1;100.0;;Poids;kg;;P - Petit;2;20.0;;Poids;kg;;NA;;;;;kg;;NA;;;;;kg;;NA;;;;;kg;;;;;;;;;;?;20.0;5.0;2.0;CAM-EVHOE;311;100020;307;100022;NA;;NA;;NA;\n"; protected GenericFormatExportService service; @@ -69,6 +73,7 @@ public class GenericFormatExportServiceAno7992Test { public static final String CRUISE_ID = "100000"; public static final String OPERATION_1_ID = "100000"; + public static final String OPERATION_2_ID = "100001"; @Before public void setUp() throws Exception { @@ -86,7 +91,7 @@ public class GenericFormatExportServiceAno7992Test { service = serviceContext.getService(GenericFormatExportService.class); - dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 1, OPERATION_1_ID); + dataContext = dbResource.loadContext(PROGRAM_ID, CRUISE_ID, 2, OPERATION_1_ID,OPERATION_2_ID); progressionModel = new ProgressionModel(); diff --git a/tutti-service/src/test/resources/genericFormat/ano7992.tuttiProtocol b/tutti-service/src/test/resources/genericFormat/ano7992.tuttiProtocol index 1f39308..b570c24 100644 --- a/tutti-service/src/test/resources/genericFormat/ano7992.tuttiProtocol +++ b/tutti-service/src/test/resources/genericFormat/ano7992.tuttiProtocol @@ -19,4 +19,231 @@ species: speciesReferenceTaxonId: 949 speciesSurveyCode: NEPH-NOR weightEnabled: true +- !SpeciesProtocol + calcifySampleEnabled: true + countIfNoFrequencyEnabled: true + lengthStepPmfmId: 41 + mandatorySampleCategoryId: + - 198 + - 196 + - 1682 + - 1702 + - 1478 + - 1418 + - 101 + speciesReferenceTaxonId: 1662 + speciesSurveyCode: TRAC-TRA + weightEnabled: true version: 3 +zone: !java.util.ArrayList +- !Zone + label: z + strata: !java.util.LinkedList + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57621 + name: Strate Gn1 + label: Gn1 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57622 + name: Strate Gn2 + label: Gn2 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57623 + name: Strate Gn3 + label: Gn3 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57624 + name: Strate Gn4 + label: Gn4 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57629 + name: Strate Gs2 + label: Gs2 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57608 + name: Strate Cc4 + label: Cc4 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57609 + name: Strate Cc5 + label: Cc5 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57625 + name: Strate Gn5 + label: Gn5 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57626 + name: Strate Gn6 + label: Gn6 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57627 + name: Strate Gn7 + label: Gn7 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57606 + name: Strate Cc3 + label: Cc3 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57628 + name: Strate Gs1 + label: Gs1 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57610 + name: Strate Cc6 + label: Cc6 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57632 + name: Strate Gs5 + label: Gs5 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57611 + name: Strate Cc7 + label: Cc7 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57633 + name: Strate Gs6 + label: Gs6 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57612 + name: Strate Cn2 + label: Cn2 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57634 + name: Strate Gs7 + label: Gs7 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57613 + name: Strate Cn3 + label: Cn3 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57630 + name: Strate Gs3 + label: Gs3 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57631 + name: Strate Gs4 + label: Gs4 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57618 + name: Strate Cs7 + label: Cs7 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57614 + name: Strate Cs3 + label: Cs3 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57615 + name: Strate Cs4 + label: Cs4 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57616 + name: Strate Cs5 + label: Cs5 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide + - !Strata + location: !fr.ifremer.tutti.persistence.entities.referential.TuttiLocationBean + id: 57617 + name: Strate Cs6 + label: Cs6 + status: !fr.ifremer.tutti.persistence.entities.referential.StatusBean + id: 1 + name: Valide -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.