Tony CHEMIT pushed to branch feature/feature/issue-2669 at ultreiaio / ird-observe

Commits:

15 changed files:

Changes:

  • client/datasource/actions/src/main/java/fr/ird/observe/client/datasource/actions/consolidate/actions/Start.java
    ... ... @@ -38,6 +38,7 @@ import fr.ird.observe.dto.ToolkitIdModifications;
    38 38
     import fr.ird.observe.dto.data.TripAware;
    
    39 39
     import fr.ird.observe.dto.data.ps.localmarket.BatchDto;
    
    40 40
     import fr.ird.observe.dto.data.ps.logbook.SampleActivityDto;
    
    41
    +import fr.ird.observe.dto.data.ps.logbook.SampleDto;
    
    41 42
     import fr.ird.observe.dto.data.ps.observation.CatchDto;
    
    42 43
     import fr.ird.observe.dto.data.ps.observation.FloatingObjectDto;
    
    43 44
     import fr.ird.observe.dto.data.ps.observation.SampleMeasureDto;
    
    ... ... @@ -195,8 +196,8 @@ public class Start extends AdminTabUIActionSupport<ConsolidateUI> {
    195 196
             for (fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateResult activityResult : result.getActivityLogbookResults()) {
    
    196 197
                 printResult(activityResult);
    
    197 198
             }
    
    198
    -        for (ToolkitIdModifications modifications : result.getLogbookSampleActivityResults()) {
    
    199
    -            printResult(SampleActivityDto.class, modifications);
    
    199
    +        for (fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult sampleResult : result.getLogbookSampleResults()) {
    
    200
    +            printResult(sampleResult);
    
    200 201
             }
    
    201 202
             for (ToolkitIdModifications batchResult : result.getLocalmarketBatchResults()) {
    
    202 203
                 printResult(BatchDto.class, batchResult);
    
    ... ... @@ -234,6 +235,19 @@ public class Start extends AdminTabUIActionSupport<ConsolidateUI> {
    234 235
             }
    
    235 236
         }
    
    236 237
     
    
    238
    +    void printResult(fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult sampleResult) {
    
    239
    +        if (sampleResult.withModifications()) {
    
    240
    +            sendMessage("  " + t("observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.modification", sampleResult.getSampleId(), sampleResult.getSampleLabel()));
    
    241
    +        }
    
    242
    +        if (sampleResult.withWarnings()) {
    
    243
    +            sendMessage("  " + t("observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.warning", sampleResult.getSampleId(), sampleResult.getSampleLabel()));
    
    244
    +        }
    
    245
    +        printResult(SampleDto.class, sampleResult.getModifications());
    
    246
    +        for (ToolkitIdModifications modification : sampleResult.getSampleActivityModifications()) {
    
    247
    +            printResult(SampleActivityDto.class, modification);
    
    248
    +        }
    
    249
    +    }
    
    250
    +
    
    237 251
         private void printResult(Class<? extends BusinessDto> dataType, ToolkitIdModifications modifications) {
    
    238 252
             if (modifications == null) {
    
    239 253
                 return;
    

  • client/runner/src/main/i18n/translations/client-runner_en_GB.properties
    ... ... @@ -510,6 +510,8 @@ observe.ui.datasource.editor.actions.consolidate.description=Consolidate observe
    510 510
     observe.ui.datasource.editor.actions.consolidate.end.trip=End consolidate data on trip %s / %s (%s) [duration\: %s]
    
    511 511
     observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.modification=Some data were computed for Logbook activity [%s] %s
    
    512 512
     observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.warning=Some warnings were found for Logbook activity [%s] %s
    
    513
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.modification=Some data were computed for Logbook sample [%s] %s
    
    514
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.warning=Some warnings were found for Logbook sample [%s] %s
    
    513 515
     observe.ui.datasource.editor.actions.consolidate.message.modifications.modification=%d change(s) for data of type %s [%s] %s
    
    514 516
     observe.ui.datasource.editor.actions.consolidate.message.modifications.property=Property %s, old value\: %s - new value\: %s
    
    515 517
     observe.ui.datasource.editor.actions.consolidate.message.modifications.warning=%d warning(s) for data of type %s [%s] %s
    

  • client/runner/src/main/i18n/translations/client-runner_es_ES.properties
    ... ... @@ -508,11 +508,13 @@ observe.ui.datasource.editor.actions.consolidate=Calcular los datos
    508 508
     observe.ui.datasource.editor.actions.consolidate.config=Consolidate data configuration
    
    509 509
     observe.ui.datasource.editor.actions.consolidate.description=Calcular los datos que no fueron observados
    
    510 510
     observe.ui.datasource.editor.actions.consolidate.end.trip=End consolidate data on trip %s / %s (%s) [duration\: %s] \#TODO
    
    511
    -observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.modification=Some data were computed for Logbook activity [%s] %s
    
    512
    -observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.warning=Some warnings were found for Logbook activity [%s] %s
    
    513
    -observe.ui.datasource.editor.actions.consolidate.message.modifications.modification=%d change(s) for data of type %s [%s] %s
    
    511
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.modification=Some data were computed for Logbook sample [%s] %s \#TODO
    
    512
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.warning=Some warnings were found for Logbook sample [%s] %s \#TODO
    
    513
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.modification=Some data were computed for Logbook activity [%s] %s \#TODO
    
    514
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.warning=Some warnings were found for Logbook activity [%s] %s \#TODO
    
    515
    +observe.ui.datasource.editor.actions.consolidate.message.modifications.modification=%d change(s) for data of type %s [%s] %s \#TODO
    
    514 516
     observe.ui.datasource.editor.actions.consolidate.message.modifications.property=Property %s, old value\: %s - new value\: %s \#TODO
    
    515
    -observe.ui.datasource.editor.actions.consolidate.message.modifications.warning=%d warning(s) for data of type %s [%s] %s
    
    517
    +observe.ui.datasource.editor.actions.consolidate.message.modifications.warning=%d warning(s) for data of type %s [%s] %s \#TODO
    
    516 518
     observe.ui.datasource.editor.actions.consolidate.message.noChanges=No modificación de datos.
    
    517 519
     observe.ui.datasource.editor.actions.consolidate.message.observation.activity.modification=Some data were computed for Observations activity [%s] %s
    
    518 520
     observe.ui.datasource.editor.actions.consolidate.message.observation.activity.warning=Some warnings were found for Observations activity [%s] %s
    

  • client/runner/src/main/i18n/translations/client-runner_fr_FR.properties
    ... ... @@ -509,7 +509,9 @@ observe.ui.datasource.editor.actions.consolidate.config=Configuration de la cons
    509 509
     observe.ui.datasource.editor.actions.consolidate.description=Calculer les données non observées
    
    510 510
     observe.ui.datasource.editor.actions.consolidate.end.trip=Consolidation terminée pour la marée %s / %s (%s) [durée \: %s]
    
    511 511
     observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.modification=Des données ont été calculées pour l'activité (Livre de bord) [%s] %s
    
    512
    -observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.warning=Des avertissements ont été détectés pour l'activité (Livre de bord) [%s] %s
    
    512
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.activity.warning=Des avertissements ont été détectés pour l'échantillon (Livre de bord) [%s] %s
    
    513
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.modification=Des données ont été calculées pour l'échantillon (Livre de bord) [%s] %s
    
    514
    +observe.ui.datasource.editor.actions.consolidate.message.logbook.sample.warning=Des avertissements ont été détectés pour l'activité (Livre de bord) [%s] %s
    
    513 515
     observe.ui.datasource.editor.actions.consolidate.message.modifications.modification=%d modification(s) pour la donnée de type %s [%s] %s
    
    514 516
     observe.ui.datasource.editor.actions.consolidate.message.modifications.property=Propriété %s, ancienne valeur \: %s - nouvelle valeur \: %s
    
    515 517
     observe.ui.datasource.editor.actions.consolidate.message.modifications.warning=%d avertissement(s) pour la donnée de type %s [%s] %s
    

  • core/api/dto-consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/common/TripConsolidateRequest.java
    ... ... @@ -49,6 +49,8 @@ public class TripConsolidateRequest implements JsonAware {
    49 49
     
    
    50 50
         private String speciesListForLogbookSampleActivityWeightedWeight;
    
    51 51
     
    
    52
    +    private String speciesListForLogbookSampleWeights;
    
    53
    +
    
    52 54
         public boolean isFailIfLengthWeightParameterNotFound() {
    
    53 55
             return failIfLengthWeightParameterNotFound;
    
    54 56
         }
    
    ... ... @@ -80,4 +82,12 @@ public class TripConsolidateRequest implements JsonAware {
    80 82
         public void setSpeciesListForLogbookSampleActivityWeightedWeight(String speciesListForLogbookSampleActivityWeightedWeight) {
    
    81 83
             this.speciesListForLogbookSampleActivityWeightedWeight = speciesListForLogbookSampleActivityWeightedWeight;
    
    82 84
         }
    
    85
    +
    
    86
    +    public String getSpeciesListForLogbookSampleWeights() {
    
    87
    +        return speciesListForLogbookSampleWeights;
    
    88
    +    }
    
    89
    +
    
    90
    +    public void setSpeciesListForLogbookSampleWeights(String speciesListForLogbookSampleWeights) {
    
    91
    +        this.speciesListForLogbookSampleWeights = speciesListForLogbookSampleWeights;
    
    92
    +    }
    
    83 93
     }

  • core/api/dto-consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/common/TripConsolidateResult.java
    ... ... @@ -23,6 +23,8 @@ package fr.ird.observe.consolidation.data.ps.common;
    23 23
      */
    
    24 24
     
    
    25 25
     
    
    26
    +import fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult;
    
    27
    +import fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult;
    
    26 28
     import fr.ird.observe.dto.ToolkitIdModifications;
    
    27 29
     import io.ultreia.java4all.util.json.JsonAware;
    
    28 30
     
    
    ... ... @@ -54,9 +56,9 @@ public class TripConsolidateResult implements JsonAware {
    54 56
          */
    
    55 57
         protected final Set<fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateResult> activityLogbookResults;
    
    56 58
         /**
    
    57
    -     * Logbook sample activities results.
    
    59
    +     * Logbook sample results.
    
    58 60
          */
    
    59
    -    private final Set<ToolkitIdModifications> logbookSampleActivityResults;
    
    61
    +    private final Set<fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult> logbookSampleResults;
    
    60 62
         /**
    
    61 63
          * Local market batches results.
    
    62 64
          */
    
    ... ... @@ -64,15 +66,15 @@ public class TripConsolidateResult implements JsonAware {
    64 66
     
    
    65 67
         public TripConsolidateResult(String tripId,
    
    66 68
                                      String tripLabel,
    
    67
    -                                 Set<fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult> activityObservationResults,
    
    69
    +                                 Set<ActivityConsolidateResult> activityObservationResults,
    
    68 70
                                      Set<fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateResult> activityLogbookResults,
    
    69
    -                                 Set<ToolkitIdModifications> logbookSampleActivityResults,
    
    71
    +                                 Set<SampleConsolidateResult> logbookSampleResults,
    
    70 72
                                      Set<ToolkitIdModifications> localmarketBatchResults) {
    
    71 73
             this.tripId = tripId;
    
    72 74
             this.tripLabel = tripLabel;
    
    73 75
             this.activityObservationResults = activityObservationResults;
    
    74 76
             this.activityLogbookResults = activityLogbookResults;
    
    75
    -        this.logbookSampleActivityResults = logbookSampleActivityResults;
    
    77
    +        this.logbookSampleResults = logbookSampleResults;
    
    76 78
             this.localmarketBatchResults = localmarketBatchResults;
    
    77 79
         }
    
    78 80
     
    
    ... ... @@ -92,8 +94,8 @@ public class TripConsolidateResult implements JsonAware {
    92 94
             return activityLogbookResults;
    
    93 95
         }
    
    94 96
     
    
    95
    -    public Set<ToolkitIdModifications> getLogbookSampleActivityResults() {
    
    96
    -        return logbookSampleActivityResults;
    
    97
    +    public Set<fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult> getLogbookSampleResults() {
    
    98
    +        return logbookSampleResults;
    
    97 99
         }
    
    98 100
     
    
    99 101
         public Set<ToolkitIdModifications> getLocalmarketBatchResults() {
    
    ... ... @@ -103,14 +105,14 @@ public class TripConsolidateResult implements JsonAware {
    103 105
         public boolean withModifications() {
    
    104 106
             return activityObservationResults.stream().anyMatch(fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult::withModifications) ||
    
    105 107
                     activityLogbookResults.stream().anyMatch(fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateResult::withModifications) ||
    
    106
    -                logbookSampleActivityResults.stream().anyMatch(ToolkitIdModifications::withModifications) ||
    
    108
    +                logbookSampleResults.stream().anyMatch(fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult::withModifications) ||
    
    107 109
                     localmarketBatchResults.stream().anyMatch(ToolkitIdModifications::withModifications);
    
    108 110
         }
    
    109 111
     
    
    110 112
         public boolean withWarnings() {
    
    111 113
             return activityObservationResults.stream().anyMatch(fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult::withWarnings) ||
    
    112 114
                     activityLogbookResults.stream().anyMatch(fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateResult::withWarnings) ||
    
    113
    -                logbookSampleActivityResults.stream().anyMatch(ToolkitIdModifications::withWarnings) ||
    
    115
    +                logbookSampleResults.stream().anyMatch(fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult::withWarnings) ||
    
    114 116
                     localmarketBatchResults.stream().anyMatch(ToolkitIdModifications::withWarnings);
    
    115 117
         }
    
    116 118
     }

  • core/api/dto-consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleConsolidateResult.java
    1
    +package fr.ird.observe.consolidation.data.ps.logbook;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe Core :: API :: Dto Consolidation
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2024 IRD, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.dto.ToolkitIdModifications;
    
    26
    +import io.ultreia.java4all.util.json.JsonAware;
    
    27
    +
    
    28
    +import java.util.Set;
    
    29
    +
    
    30
    +/**
    
    31
    + * Created at 12/09/2024.
    
    32
    + *
    
    33
    + * @author Tony Chemit - dev@tchemit.fr
    
    34
    + * @since 9.4.0
    
    35
    + */
    
    36
    +public class SampleConsolidateResult implements JsonAware {
    
    37
    +
    
    38
    +    /**
    
    39
    +     * Id of sample.
    
    40
    +     */
    
    41
    +    protected String sampleId;
    
    42
    +
    
    43
    +    /**
    
    44
    +     * Label of sample.
    
    45
    +     */
    
    46
    +    private String sampleLabel;
    
    47
    +
    
    48
    +
    
    49
    +    /**
    
    50
    +     * All modifications on the sample (can be null if there is no modification on it).
    
    51
    +     */
    
    52
    +    private ToolkitIdModifications modifications;
    
    53
    +    /**
    
    54
    +     * All modification on sample activities.
    
    55
    +     */
    
    56
    +    private Set<ToolkitIdModifications> sampleActivityModifications;
    
    57
    +
    
    58
    +    public String getSampleId() {
    
    59
    +        return sampleId;
    
    60
    +    }
    
    61
    +
    
    62
    +    public void setSampleId(String sampleId) {
    
    63
    +        this.sampleId = sampleId;
    
    64
    +    }
    
    65
    +
    
    66
    +    public String getSampleLabel() {
    
    67
    +        return sampleLabel;
    
    68
    +    }
    
    69
    +
    
    70
    +    public void setSampleLabel(String sampleLabel) {
    
    71
    +        this.sampleLabel = sampleLabel;
    
    72
    +    }
    
    73
    +
    
    74
    +    public ToolkitIdModifications getModifications() {
    
    75
    +        return modifications;
    
    76
    +    }
    
    77
    +
    
    78
    +    public void setModifications(ToolkitIdModifications modifications) {
    
    79
    +        this.modifications = modifications;
    
    80
    +    }
    
    81
    +
    
    82
    +    public Set<ToolkitIdModifications> getSampleActivityModifications() {
    
    83
    +        return sampleActivityModifications;
    
    84
    +    }
    
    85
    +
    
    86
    +    public void setSampleActivityModifications(Set<ToolkitIdModifications> sampleActivityModifications) {
    
    87
    +        this.sampleActivityModifications = sampleActivityModifications;
    
    88
    +    }
    
    89
    +
    
    90
    +    public boolean withModifications() {
    
    91
    +        if (getModifications()!=null) {
    
    92
    +            return getModifications().withModifications();
    
    93
    +        }
    
    94
    +        if (getSampleActivityModifications() != null) {
    
    95
    +            for (ToolkitIdModifications modifications : getSampleActivityModifications()) {
    
    96
    +                if (modifications.withModifications()) {
    
    97
    +                    return true;
    
    98
    +                }
    
    99
    +            }
    
    100
    +        }
    
    101
    +        return false;
    
    102
    +    }
    
    103
    +
    
    104
    +    public boolean withWarnings() {
    
    105
    +        if (getModifications()!=null) {
    
    106
    +            return getModifications().withWarnings();
    
    107
    +        }
    
    108
    +        if (getSampleActivityModifications() != null) {
    
    109
    +            for (ToolkitIdModifications modifications : getSampleActivityModifications()) {
    
    110
    +                if (modifications.withWarnings()) {
    
    111
    +                    return true;
    
    112
    +                }
    
    113
    +            }
    
    114
    +        }
    
    115
    +        return false;
    
    116
    +    }
    
    117
    +}
    
    118
    +

  • core/api/dto-consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleConsolidateResultBuilder.java
    1
    +package fr.ird.observe.consolidation.data.ps.logbook;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe Core :: API :: Dto Consolidation
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2024 IRD, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.dto.ToolkitIdModifications;
    
    26
    +
    
    27
    +import java.util.LinkedHashSet;
    
    28
    +import java.util.Optional;
    
    29
    +import java.util.Set;
    
    30
    +
    
    31
    +/**
    
    32
    + * Created at 12/09/2024.
    
    33
    + *
    
    34
    + * @author Tony Chemit - dev@tchemit.fr
    
    35
    + * @since 9.4.0
    
    36
    + */
    
    37
    +public class SampleConsolidateResultBuilder {
    
    38
    +    private final Set<ToolkitIdModifications> sampleActivityModificationBuilder = new LinkedHashSet<>();
    
    39
    +    private final String sampleLabel;
    
    40
    +    private final String sampleId;
    
    41
    +    private ToolkitIdModifications modifications;
    
    42
    +
    
    43
    +    public SampleConsolidateResultBuilder(String sampleId, String sampleLabel) {
    
    44
    +        this.sampleId = sampleId;
    
    45
    +        this.sampleLabel = sampleLabel;
    
    46
    +    }
    
    47
    +
    
    48
    +    public Optional<SampleConsolidateResult> build() {
    
    49
    +        boolean noModification = sampleActivityModificationBuilder.isEmpty() && modifications == null;
    
    50
    +        if (noModification) {
    
    51
    +            return Optional.empty();
    
    52
    +        }
    
    53
    +        SampleConsolidateResult result = new SampleConsolidateResult();
    
    54
    +        result.setSampleId(sampleId);
    
    55
    +        result.setSampleLabel(sampleLabel);
    
    56
    +        result.setModifications(modifications);
    
    57
    +        result.setSampleActivityModifications(sampleActivityModificationBuilder);
    
    58
    +        return Optional.of(result);
    
    59
    +    }
    
    60
    +
    
    61
    +    public void flushModification(ToolkitIdModifications modifications) {
    
    62
    +        this.modifications = modifications;
    
    63
    +    }
    
    64
    +
    
    65
    +    public void flushSampleActivityModification(ToolkitIdModifications modifications) {
    
    66
    +        sampleActivityModificationBuilder.add(modifications);
    
    67
    +    }
    
    68
    +
    
    69
    +}
    
    70
    +

  • core/persistence/consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/common/TripConsolidateEngine.java
    ... ... @@ -33,7 +33,6 @@ import fr.ird.observe.dto.referential.ReferentialLocale;
    33 33
     import fr.ird.observe.entities.ObserveTopiaDaoSupplier;
    
    34 34
     import fr.ird.observe.entities.data.ps.common.Trip;
    
    35 35
     import fr.ird.observe.entities.data.ps.localmarket.Batch;
    
    36
    -import fr.ird.observe.entities.data.ps.logbook.SampleActivity;
    
    37 36
     import fr.ird.observe.entities.referential.common.LengthLengthParameterCache;
    
    38 37
     import fr.ird.observe.entities.referential.common.LengthWeightParameterCache;
    
    39 38
     import fr.ird.observe.entities.referential.common.Species;
    
    ... ... @@ -66,7 +65,7 @@ public class TripConsolidateEngine {
    66 65
         private final BatchConsolidateEngine localmarketBatchEngine;
    
    67 66
         private final fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateEngine observationActivityConsolidateEngine;
    
    68 67
         private final fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateEngine logbookActivityConsolidateEngine;
    
    69
    -    private final fr.ird.observe.consolidation.data.ps.logbook.SampleActivityConsolidateEngine logbookSampleActivityConsolidateEngine;
    
    68
    +    private final fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateEngine logbookSampleConsolidateEngine;
    
    70 69
     
    
    71 70
         public TripConsolidateEngine(ServiceContext context, SimplifiedObjectTypeManager simplifiedObjectTypeManager) {
    
    72 71
             this.context = context;
    
    ... ... @@ -77,7 +76,7 @@ public class TripConsolidateEngine {
    77 76
                     lengthWeightParameterCache,
    
    78 77
                     lengthLengthParameterCache);
    
    79 78
             this.logbookActivityConsolidateEngine = new fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateEngine(context, simplifiedObjectTypeManager);
    
    80
    -        this.logbookSampleActivityConsolidateEngine = new fr.ird.observe.consolidation.data.ps.logbook.SampleActivityConsolidateEngine(context.getDecoratorService());
    
    79
    +        this.logbookSampleConsolidateEngine = new fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateEngine(context.getDecoratorService());
    
    81 80
             this.localmarketBatchEngine = new BatchConsolidateEngine(new GetOptionalRtpMeanWeightImpl(context, lengthWeightParameterCache), context.getDecoratorService());
    
    82 81
         }
    
    83 82
     
    
    ... ... @@ -91,22 +90,26 @@ public class TripConsolidateEngine {
    91 90
     
    
    92 91
             Trip trip = Trip.loadEntity(context, tripId);
    
    93 92
     
    
    94
    -        String speciesListId = request.getSpeciesListForLogbookSampleActivityWeightedWeight();
    
    95
    -        SpeciesList speciesList = SpeciesList.loadEntity(context, speciesListId);
    
    96
    -        Set<String> speciesListForLogbookSampleActivityWeightedWeight = speciesList.getSpecies().stream().map(Species ::getId).collect(Collectors.toSet());
    
    97
    -        Set<ToolkitIdModifications> logbookSampleActivityResults = consolidateLogbookSampleActivities(trip, speciesListForLogbookSampleActivityWeightedWeight);
    
    93
    +        String sampleActivitySpeciesListId = request.getSpeciesListForLogbookSampleActivityWeightedWeight();
    
    94
    +        String sampleSpeciesListId = request.getSpeciesListForLogbookSampleWeights();
    
    95
    +        SpeciesList sampleActivitySpeciesList = SpeciesList.loadEntity(context, sampleActivitySpeciesListId);
    
    96
    +        SpeciesList sampleSpeciesList = SpeciesList.loadEntity(context, sampleSpeciesListId);
    
    97
    +        Set<String> speciesListForLogbookSampleActivityWeightedWeight = sampleActivitySpeciesList.getSpecies().stream().map(Species ::getId).collect(Collectors.toSet());
    
    98
    +        Set<String> speciesListForLogbookSampleWeights = sampleSpeciesList.getSpecies().stream().map(Species ::getId).collect(Collectors.toSet());
    
    99
    +
    
    100
    +        Set<fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult> logbookSampleResults = consolidateLogbookSamples(trip, speciesListForLogbookSampleActivityWeightedWeight, speciesListForLogbookSampleWeights);
    
    98 101
             Set<ToolkitIdModifications> localmarketBatchResults = consolidateLocalmarketBatches(trip, failIfLengthWeightParameterNotFound);
    
    99 102
     
    
    100 103
             Set<fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult> observationActivityConsolidateResults = consolidateObservationActivities(trip, failIfLengthWeightParameterNotFound, failIfLengthLengthParameterNotFound);
    
    101 104
             Set<fr.ird.observe.consolidation.data.ps.logbook.ActivityConsolidateResult> logbookActivityConsolidateResults = consolidateLogbookActivities(trip);
    
    102 105
     
    
    103
    -        if (logbookSampleActivityResults.isEmpty() && observationActivityConsolidateResults.isEmpty() && localmarketBatchResults.isEmpty() && logbookActivityConsolidateResults.isEmpty()) {
    
    106
    +        if (logbookSampleResults.isEmpty() && observationActivityConsolidateResults.isEmpty() && localmarketBatchResults.isEmpty() && logbookActivityConsolidateResults.isEmpty()) {
    
    104 107
                 // no modification, nor warning on this trip
    
    105 108
                 return Optional.empty();
    
    106 109
             }
    
    107 110
             decoratorService.installDecorator(Trip.class, trip);
    
    108 111
             String tripLabel = trip.toString();
    
    109
    -        TripConsolidateResult result = new TripConsolidateResult(tripId, tripLabel, observationActivityConsolidateResults, logbookActivityConsolidateResults, logbookSampleActivityResults, localmarketBatchResults);
    
    112
    +        TripConsolidateResult result = new TripConsolidateResult(tripId, tripLabel, observationActivityConsolidateResults, logbookActivityConsolidateResults, logbookSampleResults, localmarketBatchResults);
    
    110 113
             boolean withModifications = result.withModifications();
    
    111 114
             if (withModifications) {
    
    112 115
                 log.info(String.format("Found some modifications on trip: %s - %s", tripId, result.getTripLabel()));
    
    ... ... @@ -131,23 +134,14 @@ public class TripConsolidateEngine {
    131 134
             try (ToolkitIdModificationsToSql toolkitIdModificationsToSql = new ToolkitIdModificationsToSql(scriptPath, context.timestampNow(), entitySqlModel)) {
    
    132 135
                 observationActivityConsolidateEngine.toSql(result.getActivityObservationResults(), toolkitIdModificationsToSql);
    
    133 136
                 logbookActivityConsolidateEngine.toSql(result.getActivityLogbookResults(), toolkitIdModificationsToSql);
    
    137
    +            logbookSampleConsolidateEngine.toSql(result.getLogbookSampleResults(), toolkitIdModificationsToSql);
    
    134 138
                 toolkitIdModificationsToSql.toSql(Batch.SPI, result.getLocalmarketBatchResults());
    
    135
    -            toolkitIdModificationsToSql.toSql(SampleActivity.SPI, result.getLogbookSampleActivityResults());
    
    136 139
                 return toolkitIdModificationsToSql.build();
    
    137 140
             } catch (IOException e) {
    
    138 141
                 throw new IllegalStateException("Could not produce sql script to " + scriptPath, e);
    
    139 142
             }
    
    140 143
         }
    
    141 144
     
    
    142
    -    private Set<ToolkitIdModifications> consolidateLogbookSampleActivities(Trip trip, Set<String> speciesListForLogbookSampleActivityWeightedWeight) {
    
    143
    -        Set<ToolkitIdModifications> result = new LinkedHashSet<>();
    
    144
    -        if (trip.isWellEmpty() || trip.isSampleEmpty()) {
    
    145
    -            return result;
    
    146
    -        }
    
    147
    -        logbookSampleActivityConsolidateEngine.consolidateTrip(trip,speciesListForLogbookSampleActivityWeightedWeight, result);
    
    148
    -        return result;
    
    149
    -    }
    
    150
    -
    
    151 145
         private Set<ToolkitIdModifications> consolidateLocalmarketBatches(Trip trip, boolean failIfLengthWeightParameterNotFound) {
    
    152 146
             ReferentialLocale referenceLocale = context.getReferentialLocale();
    
    153 147
             Set<ToolkitIdModifications> result = new LinkedHashSet<>();
    
    ... ... @@ -237,4 +231,25 @@ public class TripConsolidateEngine {
    237 231
             return result;
    
    238 232
         }
    
    239 233
     
    
    234
    +    private Set<fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult> consolidateLogbookSamples(Trip trip, Set<String> speciesListForLogbookSampleActivityWeightedWeight, Set<String> speciesListForLogbookSampleWeights) {
    
    235
    +        Set<fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult> result = new LinkedHashSet<>();
    
    236
    +        if (trip.isWellEmpty() || trip.isSampleEmpty()) {
    
    237
    +            return result;
    
    238
    +        }
    
    239
    +        int sampleIndex = 0;
    
    240
    +        int sampleMax = trip.getSampleSize();
    
    241
    +        Decorator sampleDecorator = context.getDecoratorService().getDecoratorByType(fr.ird.observe.entities.data.ps.logbook.Sample.class);
    
    242
    +        for (fr.ird.observe.entities.data.ps.logbook.Sample sample : trip.getSample()) {
    
    243
    +            sample.registerDecorator(sampleDecorator);
    
    244
    +            String routePrefix = String.format("Logbook - Sample %s [%s/%s] ", sample, ++sampleIndex, sampleMax);
    
    245
    +            log.debug("{} Start consolidate sample: {}", routePrefix, sample.getTopiaId());
    
    246
    +            Optional<fr.ird.observe.consolidation.data.ps.logbook.SampleConsolidateResult> sampleResult = logbookSampleConsolidateEngine.consolidateSample(trip,
    
    247
    +                                                                                                                                                           sample,
    
    248
    +                                                                                                                                                           speciesListForLogbookSampleActivityWeightedWeight,
    
    249
    +                                                                                                                                                           speciesListForLogbookSampleWeights);
    
    250
    +            sampleResult.ifPresent(result::add);
    
    251
    +        }
    
    252
    +        return result;
    
    253
    +    }
    
    254
    +
    
    240 255
     }

  • core/persistence/consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleActivityConsolidateContext.java
    ... ... @@ -48,13 +48,13 @@ public class SampleActivityConsolidateContext implements ConsolidateContext<Samp
    48 48
         private final Decorator decorator;
    
    49 49
         private final Set<Well> tripWell;
    
    50 50
         private final Set<String> speciesListForLogbookSampleActivityWeightedWeight;
    
    51
    -    private final Set<ToolkitIdModifications> resultBuilder;
    
    51
    +    private final SampleConsolidateResultBuilder resultBuilder;
    
    52 52
         private final java.util.Set<String> warnings = new LinkedHashSet<>();
    
    53 53
         private final Set<String> sampledWellIds;
    
    54 54
         private Sample sample;
    
    55 55
         private SampleActivity datum;
    
    56 56
     
    
    57
    -    public SampleActivityConsolidateContext(JavaBeanMonitor monitor, Decorator decorator, Trip trip, Set<String> speciesListForLogbookSampleActivityWeightedWeight, Set<ToolkitIdModifications> resultBuilder) {
    
    57
    +    public SampleActivityConsolidateContext(JavaBeanMonitor monitor, Decorator decorator, Trip trip, Set<String> speciesListForLogbookSampleActivityWeightedWeight, SampleConsolidateResultBuilder resultBuilder) {
    
    58 58
             this.monitor = monitor;
    
    59 59
             this.decorator = decorator;
    
    60 60
             this.tripWell = trip.getWell();
    
    ... ... @@ -80,10 +80,10 @@ public class SampleActivityConsolidateContext implements ConsolidateContext<Samp
    80 80
         public void flush() {
    
    81 81
             if (monitor.wasModified()) {
    
    82 82
                 datum.registerDecorator(decorator);
    
    83
    -            monitor.toModifications(modifications -> new ToolkitIdModifications(datum, modifications, warnings.isEmpty() ? null : warnings)).ifPresent(resultBuilder::add);
    
    83
    +            monitor.toModifications(modifications -> new ToolkitIdModifications(datum, modifications, warnings.isEmpty() ? null : warnings)).ifPresent(resultBuilder::flushSampleActivityModification);
    
    84 84
             } else if (!warnings.isEmpty()) {
    
    85 85
                 datum.registerDecorator(decorator);
    
    86
    -            resultBuilder.add(new ToolkitIdModifications(datum, java.util.Set.of(), java.util.Set.copyOf(warnings)));
    
    86
    +            resultBuilder.flushSampleActivityModification(new ToolkitIdModifications(datum, java.util.Set.of(), java.util.Set.copyOf(warnings)));
    
    87 87
             }
    
    88 88
             monitor.setBean(null);
    
    89 89
             this.datum = null;
    

  • core/persistence/consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleActivityConsolidateEngine.javacore/persistence/consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleConsolidateActions.java
    ... ... @@ -4,7 +4,7 @@ package fr.ird.observe.consolidation.data.ps.logbook;
    4 4
      * #%L
    
    5 5
      * ObServe Core :: Persistence :: Consolidation
    
    6 6
      * %%
    
    7
    - * Copyright (C) 2008 - 2023 IRD, Ultreia.io
    
    7
    + * Copyright (C) 2008 - 2024 IRD, Ultreia.io
    
    8 8
      * %%
    
    9 9
      * This program is free software: you can redistribute it and/or modify
    
    10 10
      * it under the terms of the GNU General Public License as
    
    ... ... @@ -22,45 +22,43 @@ package fr.ird.observe.consolidation.data.ps.logbook;
    22 22
      * #L%
    
    23 23
      */
    
    24 24
     
    
    25
    -import fr.ird.observe.decoration.DecoratorService;
    
    26
    -import fr.ird.observe.dto.ToolkitIdModifications;
    
    27
    -import fr.ird.observe.entities.data.ps.common.Trip;
    
    25
    +import fr.ird.observe.consolidation.AtomicConsolidateAction;
    
    28 26
     import fr.ird.observe.entities.data.ps.logbook.Sample;
    
    29
    -import fr.ird.observe.entities.data.ps.logbook.SampleActivity;
    
    30
    -import io.ultreia.java4all.bean.monitor.JavaBeanMonitor;
    
    31
    -import io.ultreia.java4all.decoration.Decorator;
    
    32 27
     
    
    28
    +import java.util.List;
    
    33 29
     import java.util.Set;
    
    34 30
     
    
    35 31
     /**
    
    36
    - * Created on 14/04/2023.
    
    32
    + * Created at 12/09/2024.
    
    37 33
      *
    
    38 34
      * @author Tony Chemit - dev@tchemit.fr
    
    39
    - * @since 9.1.0
    
    35
    + * @since 9.4.0
    
    40 36
      */
    
    41
    -public class SampleActivityConsolidateEngine {
    
    42
    -    private final JavaBeanMonitor monitor;
    
    43
    -    private final Decorator decorator;
    
    37
    +public enum SampleConsolidateActions implements AtomicConsolidateAction<SampleConsolidateContext, Sample> {
    
    44 38
     
    
    45
    -    public SampleActivityConsolidateEngine(DecoratorService decoratorService) {
    
    46
    -        this.monitor = new JavaBeanMonitor(SampleActivity.PROPERTY_WEIGHTED_WEIGHT, SampleActivity.PROPERTY_WEIGHTED_WEIGHT_COMPUTED);
    
    47
    -        this.decorator = decoratorService.getDecoratorByType(SampleActivity.class);
    
    48
    -    }
    
    39
    +    /**
    
    40
    +     * Compute {@code Sample#weights}.
    
    41
    +     */
    
    42
    +    ComputeWeights() {
    
    43
    +        @Override
    
    44
    +        public List<String> fieldNames() {
    
    45
    +            return List.of(Sample.PROPERTY_BIGS_WEIGHT, Sample.PROPERTY_SMALLS_WEIGHT, Sample.PROPERTY_TOTAL_WEIGHT, Sample.PROPERTY_WEIGHTS_COMPUTED);
    
    46
    +        }
    
    49 47
     
    
    50
    -    public void consolidateTrip(Trip trip, Set<String> speciesListForLogbookSampleActivityWeightedWeight, Set<ToolkitIdModifications> resultBuilder) {
    
    51
    -        SampleActivityConsolidateContext context = new SampleActivityConsolidateContext(monitor, decorator, trip, speciesListForLogbookSampleActivityWeightedWeight,resultBuilder);
    
    52
    -        for (Sample sample : trip.getSample()) {
    
    53
    -            if (sample.isSampleActivityEmpty()) {
    
    54
    -                continue;
    
    55
    -            }
    
    56
    -            for (SampleActivity sampleActivity : sample.getSampleActivity()) {
    
    57
    -                try {
    
    58
    -                    context.watch(sample, sampleActivity);
    
    59
    -                    SampleActivityConsolidateActions.ComputeWeightedWeight.execute(context, sampleActivity);
    
    60
    -                } finally {
    
    61
    -                    context.flush();
    
    62
    -                }
    
    63
    -            }
    
    48
    +        @Override
    
    49
    +        public boolean test(SampleConsolidateContext context, Sample datum) {
    
    50
    +            return datum.isWeightsComputed() || (datum.getBigsWeight() == null && datum.getSmallsWeight() == null && datum.getTotalWeight() == null);
    
    64 51
             }
    
    52
    +
    
    53
    +        @Override
    
    54
    +        public void accept(SampleConsolidateContext context, Sample datum) {
    
    55
    +            Set<String> speciesList = context.getSpeciesListForLogbookSampleWeights();
    
    56
    +            //datum.setWeightsComputed(true);
    
    57
    +        }
    
    58
    +    };
    
    59
    +
    
    60
    +    @Override
    
    61
    +    public String toString() {
    
    62
    +        return "ps.logbook." + SampleConsolidateActions.class.getSimpleName() + "." + name();
    
    65 63
         }
    
    66 64
     }

  • core/persistence/consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleConsolidateContext.java
    1
    +package fr.ird.observe.consolidation.data.ps.logbook;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe Core :: Persistence :: Consolidation
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2024 IRD, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.consolidation.ConsolidateContext;
    
    26
    +import fr.ird.observe.dto.ToolkitIdModifications;
    
    27
    +import fr.ird.observe.entities.data.ps.common.Trip;
    
    28
    +import fr.ird.observe.entities.data.ps.logbook.Sample;
    
    29
    +import fr.ird.observe.entities.data.ps.logbook.Well;
    
    30
    +import io.ultreia.java4all.bean.monitor.JavaBeanMonitor;
    
    31
    +import io.ultreia.java4all.decoration.Decorator;
    
    32
    +
    
    33
    +import java.util.LinkedHashSet;
    
    34
    +import java.util.Objects;
    
    35
    +import java.util.Set;
    
    36
    +import java.util.function.ToDoubleFunction;
    
    37
    +import java.util.stream.Collectors;
    
    38
    +
    
    39
    +/**
    
    40
    + * Created at 12/09/2024.
    
    41
    + *
    
    42
    + * @author Tony Chemit - dev@tchemit.fr
    
    43
    + * @since 9.4.0
    
    44
    + */
    
    45
    +public class SampleConsolidateContext implements ConsolidateContext<Sample> {
    
    46
    +    private final JavaBeanMonitor monitor;
    
    47
    +    private final Decorator decorator;
    
    48
    +    private final Set<Well> tripWell;
    
    49
    +    private final Set<String> speciesListForLogbookSampleWeights;
    
    50
    +    private final SampleConsolidateResultBuilder resultBuilder;
    
    51
    +    private final java.util.Set<String> warnings = new LinkedHashSet<>();
    
    52
    +    private final Set<String> sampledWellIds;
    
    53
    +    private Sample datum;
    
    54
    +
    
    55
    +    public SampleConsolidateContext(JavaBeanMonitor monitor,
    
    56
    +                                    Decorator decorator,
    
    57
    +                                    Trip trip,
    
    58
    +                                    Set<String> speciesListForLogbookSampleWeights,
    
    59
    +                                    SampleConsolidateResultBuilder resultBuilder) {
    
    60
    +        this.monitor = monitor;
    
    61
    +        this.decorator = decorator;
    
    62
    +        this.tripWell = trip.getWell();
    
    63
    +        this.sampledWellIds = trip.getSample().stream().map(Sample::getWell).collect(Collectors.toSet());
    
    64
    +        this.speciesListForLogbookSampleWeights = speciesListForLogbookSampleWeights;
    
    65
    +        this.resultBuilder = resultBuilder;
    
    66
    +    }
    
    67
    +
    
    68
    +    public Set<String> getSampledWellIds() {
    
    69
    +        return sampledWellIds;
    
    70
    +    }
    
    71
    +
    
    72
    +    public Set<String> getSpeciesListForLogbookSampleWeights() {
    
    73
    +        return speciesListForLogbookSampleWeights;
    
    74
    +    }
    
    75
    +
    
    76
    +    public void watch(Sample datum) {
    
    77
    +        this.datum = Objects.requireNonNull(datum);
    
    78
    +        monitor.setBean(datum);
    
    79
    +    }
    
    80
    +
    
    81
    +    public void flush() {
    
    82
    +        if (monitor.wasModified()) {
    
    83
    +            datum.registerDecorator(decorator);
    
    84
    +            monitor.toModifications(modifications -> new ToolkitIdModifications(datum, modifications, warnings.isEmpty() ? null : warnings)).ifPresent(resultBuilder::flushModification);
    
    85
    +        } else if (!warnings.isEmpty()) {
    
    86
    +            datum.registerDecorator(decorator);
    
    87
    +            resultBuilder.flushModification(new ToolkitIdModifications(datum, java.util.Set.of(), java.util.Set.copyOf(warnings)));
    
    88
    +        }
    
    89
    +        monitor.setBean(null);
    
    90
    +        this.datum = null;
    
    91
    +        warnings.clear();
    
    92
    +    }
    
    93
    +
    
    94
    +    public double sumOnTripWell(ToDoubleFunction<Well> function) {
    
    95
    +        return tripWell.stream().mapToDouble(function).sum();
    
    96
    +    }
    
    97
    +
    
    98
    +    @Override
    
    99
    +    public JavaBeanMonitor monitor() {
    
    100
    +        return monitor;
    
    101
    +    }
    
    102
    +
    
    103
    +    @Override
    
    104
    +    public Class<Sample> dataType() {
    
    105
    +        return Sample.class;
    
    106
    +    }
    
    107
    +}

  • core/persistence/consolidation/src/main/java/fr/ird/observe/consolidation/data/ps/logbook/SampleConsolidateEngine.java
    1
    +package fr.ird.observe.consolidation.data.ps.logbook;
    
    2
    +
    
    3
    +/*-
    
    4
    + * #%L
    
    5
    + * ObServe Core :: Persistence :: Consolidation
    
    6
    + * %%
    
    7
    + * Copyright (C) 2008 - 2023 IRD, Ultreia.io
    
    8
    + * %%
    
    9
    + * This program is free software: you can redistribute it and/or modify
    
    10
    + * it under the terms of the GNU General Public License as
    
    11
    + * published by the Free Software Foundation, either version 3 of the
    
    12
    + * License, or (at your option) any later version.
    
    13
    + *
    
    14
    + * This program is distributed in the hope that it will be useful,
    
    15
    + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    16
    + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    
    17
    + * GNU General Public License for more details.
    
    18
    + *
    
    19
    + * You should have received a copy of the GNU General Public
    
    20
    + * License along with this program.  If not, see
    
    21
    + * <http://www.gnu.org/licenses/gpl-3.0.html>.
    
    22
    + * #L%
    
    23
    + */
    
    24
    +
    
    25
    +import fr.ird.observe.decoration.DecoratorService;
    
    26
    +import fr.ird.observe.entities.data.ps.common.Trip;
    
    27
    +import fr.ird.observe.entities.data.ps.logbook.Sample;
    
    28
    +import fr.ird.observe.entities.data.ps.logbook.SampleActivity;
    
    29
    +import fr.ird.observe.spi.consolidation.ToolkitIdModificationsToSql;
    
    30
    +import io.ultreia.java4all.bean.monitor.JavaBeanMonitor;
    
    31
    +import io.ultreia.java4all.decoration.Decorator;
    
    32
    +
    
    33
    +import java.util.Optional;
    
    34
    +import java.util.Set;
    
    35
    +
    
    36
    +/**
    
    37
    + * Created on 14/04/2023.
    
    38
    + *
    
    39
    + * @author Tony Chemit - dev@tchemit.fr
    
    40
    + * @since 9.1.0
    
    41
    + */
    
    42
    +public class SampleConsolidateEngine {
    
    43
    +    private final JavaBeanMonitor sampleMonitor;
    
    44
    +    private final JavaBeanMonitor sampleActivityMonitor;
    
    45
    +    private final Decorator sampleDecorator;
    
    46
    +    private final Decorator sampleActivityDecorator;
    
    47
    +
    
    48
    +    public SampleConsolidateEngine(DecoratorService decoratorService) {
    
    49
    +        this.sampleMonitor = new JavaBeanMonitor(Sample.PROPERTY_BIGS_WEIGHT, Sample.PROPERTY_SMALLS_WEIGHT, Sample.PROPERTY_TOTAL_WEIGHT, Sample.PROPERTY_WEIGHTS_COMPUTED);
    
    50
    +        this.sampleActivityMonitor = new JavaBeanMonitor(SampleActivity.PROPERTY_WEIGHTED_WEIGHT, SampleActivity.PROPERTY_WEIGHTED_WEIGHT_COMPUTED);
    
    51
    +        this.sampleDecorator = decoratorService.getDecoratorByType(Sample.class);
    
    52
    +        this.sampleActivityDecorator = decoratorService.getDecoratorByType(SampleActivity.class);
    
    53
    +    }
    
    54
    +
    
    55
    +    public void toSql(java.util.Set<SampleConsolidateResult> samplesResults, ToolkitIdModificationsToSql toolkitIdModificationsToSql) {
    
    56
    +        for (SampleConsolidateResult sampleConsolidateResult : samplesResults) {
    
    57
    +            toolkitIdModificationsToSql.toSql(Sample.SPI, sampleConsolidateResult.getModifications());
    
    58
    +            toolkitIdModificationsToSql.toSql(SampleActivity.SPI, sampleConsolidateResult.getSampleActivityModifications());
    
    59
    +        }
    
    60
    +    }
    
    61
    +
    
    62
    +    public Optional<SampleConsolidateResult> consolidateSample(Trip trip,
    
    63
    +                                                               Sample sample,
    
    64
    +                                                               Set<String> speciesListForLogbookSampleActivityWeightedWeight,
    
    65
    +                                                               Set<String> speciesListForLogbookSampleWeights) {
    
    66
    +        SampleConsolidateResultBuilder resultBuilder = new SampleConsolidateResultBuilder(sample.getId(), sampleDecorator.decorate(sample));
    
    67
    +        SampleConsolidateContext sampleConsolidateContext = new SampleConsolidateContext(sampleMonitor,
    
    68
    +                                                                                         sampleDecorator,
    
    69
    +                                                                                         trip,
    
    70
    +                                                                                         speciesListForLogbookSampleWeights,
    
    71
    +                                                                                         resultBuilder);
    
    72
    +        consolidateSample(sampleConsolidateContext, sample);
    
    73
    +        if (sample.isSampleActivityNotEmpty()) {
    
    74
    +            SampleActivityConsolidateContext sampleActivityConsolidateContext = new SampleActivityConsolidateContext(sampleActivityMonitor,
    
    75
    +                                                                                                                     sampleActivityDecorator,
    
    76
    +                                                                                                                     trip,
    
    77
    +                                                                                                                     speciesListForLogbookSampleActivityWeightedWeight,
    
    78
    +                                                                                                                     resultBuilder);
    
    79
    +
    
    80
    +            for (SampleActivity sampleActivity : sample.getSampleActivity()) {
    
    81
    +                consolidateSampleActivity(sampleActivityConsolidateContext, sample, sampleActivity);
    
    82
    +            }
    
    83
    +        }
    
    84
    +        return resultBuilder.build();
    
    85
    +    }
    
    86
    +
    
    87
    +    private void consolidateSample(SampleConsolidateContext context, Sample sample) {
    
    88
    +        try {
    
    89
    +            context.watch(sample);
    
    90
    +            SampleConsolidateActions.ComputeWeights.execute(context, sample);
    
    91
    +        } finally {
    
    92
    +            context.flush();
    
    93
    +        }
    
    94
    +    }
    
    95
    +
    
    96
    +    private void consolidateSampleActivity(SampleActivityConsolidateContext context, Sample sample, SampleActivity sampleActivity) {
    
    97
    +
    
    98
    +        try {
    
    99
    +            context.watch(sample, sampleActivity);
    
    100
    +            SampleActivityConsolidateActions.ComputeWeightedWeight.execute(context, sampleActivity);
    
    101
    +        } finally {
    
    102
    +            context.flush();
    
    103
    +        }
    
    104
    +    }
    
    105
    +}

  • core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/ConsolidateDataServiceFixtures.java
    ... ... @@ -206,14 +206,15 @@ public class ConsolidateDataServiceFixtures extends GeneratedConsolidateDataServ
    206 206
             request.setTripId(getProperty("consolidateTrip.id"));
    
    207 207
             request.setFailIfLengthWeightParameterNotFound(false);
    
    208 208
             request.setSpeciesListForLogbookSampleActivityWeightedWeight(getProperty("consolidateTrip.speciesListForLogbookSampleActivityWeightedWeight"));
    
    209
    +        request.setSpeciesListForLogbookSampleWeights(getProperty("consolidateTrip.speciesListForLogbookSampleWeights"));
    
    209 210
     
    
    210 211
             TripConsolidateResult actual = service.consolidateTrip(simplifiedObjectTypeSpecializedRules, request);
    
    211 212
             Assert.assertNotNull(actual);
    
    212 213
             Assert.assertNotNull(actual.getActivityObservationResults());
    
    213 214
             Assert.assertNotNull(actual.getActivityLogbookResults());
    
    214
    -        Assert.assertNotNull(actual.getLogbookSampleActivityResults());
    
    215
    +        Assert.assertNotNull(actual.getLogbookSampleResults());
    
    215 216
             Assert.assertEquals(getIntegerProperty("consolidateTrip.logbookActivity.count"), actual.getActivityLogbookResults().size());
    
    216
    -        Assert.assertEquals(getIntegerProperty("consolidateTrip.logbookSampleActivity.count"), actual.getLogbookSampleActivityResults().size());
    
    217
    +        Assert.assertEquals(getIntegerProperty("consolidateTrip.logbookSampleActivity.count"), actual.getLogbookSampleResults().size());
    
    217 218
             Assert.assertEquals(getIntegerProperty("consolidateTrip.observationsActivityResult.count"), actual.getActivityObservationResults().size());
    
    218 219
             Assert.assertEquals(getIntegerProperty("consolidateTrip.observationsActivityResult.withModifications.count"), actual.getActivityObservationResults().stream().filter(fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult::withModifications).count());
    
    219 220
             Assert.assertEquals(getIntegerProperty("consolidateTrip.observationsActivityResult.withWarnings.count"), actual.getActivityObservationResults().stream().filter(fr.ird.observe.consolidation.data.ps.observation.ActivityConsolidateResult::withWarnings).count());
    

  • core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/ConsolidateDataService.properties
    ... ... @@ -30,3 +30,4 @@ consolidateTrip.observationsActivityResult.count=4
    30 30
     consolidateTrip.observationsActivityResult.withModifications.count=4
    
    31 31
     consolidateTrip.observationsActivityResult.withWarnings.count=4
    
    32 32
     consolidateTrip.speciesListForLogbookSampleActivityWeightedWeight=fr.ird.referential.common.SpeciesList#1464000000000#100
    
    33
    +consolidateTrip.speciesListForLogbookSampleWeights=fr.ird.referential.common.SpeciesList#1464000000000#101