Tony CHEMIT pushed to branch develop-9.0.x at ultreiaio / ird-observe Commits: 46e0163d by Tony Chemit at 2023-02-15T15:05:42+01:00 Consolidate - Improve API (See #2628) - - - - - 17 changed files: - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIModelStates.java - client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/localmarket/TripBatchUIModelStates.java - core/api/dto/src/main/java/fr/ird/observe/dto/ProtectedIdsPs.java - core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/dcp/consolidate/FloatingObjectConsolidateEngine.java - core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/dcp/consolidate/FloatingObjectConsolidateResult.java - − core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/dcp/consolidate/FloatingObjectResultConsolidateBuilder.java - core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/localmarket/consolidate/BatchConsolidateResult.java - core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/consolidate/ActivityConsolidateResult.java - − core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/consolidate/CatchModification.java - − core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/consolidate/SampleMeasureModification.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripConsolidateEngine.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityConsolidateContext.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityConsolidateResultBuilder.java - core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/ConsolidateDataServiceFixtures.java - toolkit/api/src/main/java/fr/ird/observe/dto/DtoPropertyModifications.java - toolkit/api/src/main/java/fr/ird/observe/dto/DtoPropertyModification.java → toolkit/api/src/main/java/fr/ird/observe/dto/JavaBeanPropertyModification.java - toolkit/api/src/main/java/fr/ird/observe/spi/json/toolkit/DtoPropertyModificationAdapter.java → toolkit/api/src/main/java/fr/ird/observe/spi/json/toolkit/JavaBeanPropertyModificationAdapter.java Changes: ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/dcp/DcpUIModelStates.java ===================================== @@ -100,8 +100,8 @@ public interface DcpUIModelStates<D extends DataDto & FloatingObjectAware, P ext default void recomputeComputedValues() { Optional<FloatingObjectConsolidateResult> result = consolidate(getConsolidateEngine()); result.ifPresent(r -> { - log.info("Flush " + r.getFloatingObjectModifications().size() + " consolidate dcp changes..."); - r.flushToDto(getBean()); + log.info("Flush " + r.getModifications().size() + " consolidate dcp changes..."); + r.flushToBean(getBean()); fireComputedValuesChanged(); }); } ===================================== client/datasource/editor/ps/src/main/java/fr/ird/observe/client/datasource/editor/ps/data/localmarket/TripBatchUIModelStates.java ===================================== @@ -103,7 +103,7 @@ public class TripBatchUIModelStates extends GeneratedTripBatchUIModelStates { BatchConsolidateResult result = psConsolidateDataService.consolidateLocalmarketBatch(request); if (result != null) { log.info("Flush consolidate batch changes..."); - result.flushToDto(getTableEditBean()); + result.flushToBean(getTableEditBean()); String lengthWeightParameterNotFound = result.getLengthWeightParameterNotFound(); if (lengthWeightParameterNotFound != null) { log.warn(lengthWeightParameterNotFound); ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/ProtectedIdsPs.java ===================================== @@ -77,4 +77,7 @@ public interface ProtectedIdsPs { String PS_LOGBOOK_SAMPLE_DEFAULT_SAMPLE_QUALITY_ID = "fr.ird.referential.ps.logbook.SampleQuality#1464000000000#01"; Set<String> PS_LOGBOOK_CATCH_SPECIES_FATES = Set.of("fr.ird.referential.ps.common.SpeciesFate#1239832683619#0.5722739932065866", "fr.ird.referential.ps.common.SpeciesFate#1501492537510#0.9210847837998154"); String PS_LOCAL_MARKET_SAMPLE_DEFAULT_SAMPLE_TYPE_ID = "fr.ird.referential.ps.common.SampleType#1464000000000#01"; + String PS_LOCAL_MARKET_BATCH_WEIGHT_TYPE_WEIGHING = "fr.ird.referential.ps.localmarket.BatchWeightType#1464000000000#01"; + String PS_LOCAL_MARKET_BATCH_WEIGHT_TYPE_SINGLE_SPECIES_INDIVIDUAL = "fr.ird.referential.ps.localmarket.BatchWeightType#1464000000000#02"; + String PS_LOCAL_MARKET_BATCH_WEIGHT_TYPE_PACKAGING_NOT_WEIGHTED = "fr.ird.referential.ps.localmarket.BatchWeightType#1464000000000#03"; } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/dcp/consolidate/FloatingObjectConsolidateEngine.java ===================================== @@ -28,7 +28,6 @@ import fr.ird.observe.dto.data.ps.FloatingObjectAware; import fr.ird.observe.dto.data.ps.FloatingObjectPartAware; import fr.ird.observe.dto.data.ps.dcp.SimplifiedObjectTypeManager; import fr.ird.observe.dto.data.ps.observation.FloatingObjectDto; -import fr.ird.observe.dto.data.ps.observation.consolidate.FloatingObjectConsolidateRequest; import io.ultreia.java4all.bean.monitor.BeanMonitor; import java.util.Optional; @@ -47,12 +46,12 @@ public class FloatingObjectConsolidateEngine { private static class FloatingObjectConsolidateContext { - final FloatingObjectResultConsolidateBuilder resultBuilder; - final BeanMonitor dcpMonitor; + final FloatingObjectConsolidateResult.Builder resultBuilder; + final BeanMonitor monitor; - FloatingObjectConsolidateContext(FloatingObjectResultConsolidateBuilder resultBuilder) { - this.resultBuilder = resultBuilder; - dcpMonitor = new BeanMonitor( + FloatingObjectConsolidateContext(FloatingObjectConsolidateResult.Builder builder) { + this.resultBuilder = builder; + this.monitor = new BeanMonitor( FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE, @@ -62,17 +61,15 @@ public class FloatingObjectConsolidateEngine { ); } - - void watchDcp(DataDto dcp) { - dcpMonitor.setBean(dcp); + void watch(DataDto floatingObject) { + monitor.setBean(floatingObject); } - void flushDcp() { - if (dcpMonitor.wasModified()) { - DataDto dcp = (DataDto) dcpMonitor.getBean(); - resultBuilder.flushDcpModification(dcp, dcpMonitor.getModifiedProperties()); + void flush() { + if (monitor.wasModified()) { + resultBuilder.flush(monitor); } - dcpMonitor.setBean(null); + monitor.setBean(null); } } @@ -80,7 +77,7 @@ public class FloatingObjectConsolidateEngine { this.simplifiedObjectTypeManager = simplifiedObjectTypeManager; } - public Optional<FloatingObjectConsolidateResult> consolidate(FloatingObjectConsolidateRequest request) { + public Optional<FloatingObjectConsolidateResult> consolidate(fr.ird.observe.dto.data.ps.observation.consolidate.FloatingObjectConsolidateRequest request) { return consolidate0(request); } @@ -91,36 +88,35 @@ public class FloatingObjectConsolidateEngine { private <F extends DataDto & FloatingObjectAware, P extends DataDto & FloatingObjectPartAware> Optional<FloatingObjectConsolidateResult> consolidate0(FloatingObjectAdapter<F, P> request) { - FloatingObjectResultConsolidateBuilder builder = new FloatingObjectResultConsolidateBuilder(); + FloatingObjectConsolidateResult.Builder builder = FloatingObjectConsolidateResult.builder(); FloatingObjectConsolidateContext context = new FloatingObjectConsolidateContext(builder); - F dcp = request.getFloatingObject(); - context.watchDcp(dcp); + F floatingObject = request.getFloatingObject(); + context.watch(floatingObject); Set<P> whenArriving = request.getWhenArriving(); Set<P> whenLeaving = request.getWhenLeaving(); - computeDcpValue(dcp, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE, request, whenArriving, this::computeDcpSimplifiedObjectType0); - computeDcpValue(dcp, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE, request, whenLeaving, this::computeDcpSimplifiedObjectType0); + computeDcpValue(floatingObject, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE, request, whenArriving, this::computeDcpSimplifiedObjectType0); + computeDcpValue(floatingObject, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE, request, whenLeaving, this::computeDcpSimplifiedObjectType0); - computeDcpValue(dcp, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING, request, whenArriving, this::computeDcpNonEntangling0); - computeDcpValue(dcp, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING, request, whenLeaving, this::computeDcpNonEntangling0); + computeDcpValue(floatingObject, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING, request, whenArriving, this::computeDcpNonEntangling0); + computeDcpValue(floatingObject, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING, request, whenLeaving, this::computeDcpNonEntangling0); - computeDcpValue(dcp, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE, request, whenArriving, this::computeDcpBiodegradable0); - computeDcpValue(dcp, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE, request, whenLeaving, this::computeDcpBiodegradable0); + computeDcpValue(floatingObject, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE, request, whenArriving, this::computeDcpBiodegradable0); + computeDcpValue(floatingObject, FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE, request, whenLeaving, this::computeDcpBiodegradable0); - context.flushDcp(); + context.flush(); return builder.build(); - } - private <F extends DataDto&FloatingObjectAware, P extends DataDto&FloatingObjectPartAware> void computeDcpValue(F dcp, String propertyName, FloatingObjectAdapter<F, P> adapter, Set<P> parts, BiFunction<FloatingObjectAdapter<F, P>, Set<P>, Object> valueComputer) { + private <F extends DataDto & FloatingObjectAware, P extends DataDto & FloatingObjectPartAware> void computeDcpValue(F dcp, String propertyName, FloatingObjectAdapter<F, P> adapter, Set<P> parts, BiFunction<FloatingObjectAdapter<F, P>, Set<P>, Object> valueComputer) { Object newValue = valueComputer.apply(adapter, parts); dcp.set(propertyName, newValue); } - private <F extends DataDto&FloatingObjectAware, P extends DataDto&FloatingObjectPartAware> DcpComputedValue computeDcpBiodegradable0(FloatingObjectAdapter<F, P> adapter, Set<P> parts) { + private <F extends DataDto & FloatingObjectAware, P extends DataDto & FloatingObjectPartAware> DcpComputedValue computeDcpBiodegradable0(FloatingObjectAdapter<F, P> adapter, Set<P> parts) { if (parts.isEmpty()) { return null; } @@ -139,7 +135,7 @@ public class FloatingObjectConsolidateEngine { return result; } - private <F extends DataDto&FloatingObjectAware, P extends DataDto&FloatingObjectPartAware> String computeDcpSimplifiedObjectType0(FloatingObjectAdapter<F, P> adapter, Set<P> parts) { + private <F extends DataDto & FloatingObjectAware, P extends DataDto & FloatingObjectPartAware> String computeDcpSimplifiedObjectType0(FloatingObjectAdapter<F, P> adapter, Set<P> parts) { if (parts.isEmpty()) { return null; } @@ -147,7 +143,7 @@ public class FloatingObjectConsolidateEngine { return simplifiedObjectTypeManager.getStandardCode(objectMaterialIds); } - private <F extends DataDto&FloatingObjectAware, P extends DataDto&FloatingObjectPartAware> DcpComputedValue computeDcpNonEntangling0(FloatingObjectAdapter<F, P> adapter, Set<P> parts) { + private <F extends DataDto & FloatingObjectAware, P extends DataDto & FloatingObjectPartAware> DcpComputedValue computeDcpNonEntangling0(FloatingObjectAdapter<F, P> adapter, Set<P> parts) { if (parts.isEmpty()) { return null; } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/dcp/consolidate/FloatingObjectConsolidateResult.java ===================================== @@ -23,44 +23,64 @@ package fr.ird.observe.dto.data.ps.dcp.consolidate; */ -import fr.ird.observe.dto.DtoPropertyModification; -import fr.ird.observe.dto.ObserveDto; +import fr.ird.observe.dto.JavaBeanPropertyModification; import fr.ird.observe.dto.data.DataDto; +import io.ultreia.java4all.bean.JavaBean; +import io.ultreia.java4all.bean.monitor.BeanMonitor; +import io.ultreia.java4all.util.json.JsonAware; -import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Optional; import java.util.Set; /** - * Pour retourner le résultat de la consolidation d'une activité de type Seine. + * Contains the result of a consolidation operation on a Floating Object.. * <p> - * Un tel objet est créé uniquement si des modifications on été effectuée sur l'activité. + * UA such object is only created if there is some modification on a the floating object. * <p> * Created on 28/08/15. * * @author Tony Chemit - dev@tchemit.fr */ -public class FloatingObjectConsolidateResult implements Serializable, ObserveDto { - - private static final long serialVersionUID = 1L; +public class FloatingObjectConsolidateResult implements JsonAware { /** * All modifications on floating object. */ - private final Set<DtoPropertyModification> floatingObjectModifications; + private final Set<JavaBeanPropertyModification> modifications; - FloatingObjectConsolidateResult(Set<DtoPropertyModification> floatingObjectModifications) { - this.floatingObjectModifications = floatingObjectModifications; + public static Builder builder() { + return new Builder(); } - public Set<DtoPropertyModification> getFloatingObjectModifications() { - return floatingObjectModifications; - } + public static class Builder { + + private final Set<JavaBeanPropertyModification> modifications = new LinkedHashSet<>(); - public void flushToDto(DataDto dto) { - for (DtoPropertyModification floatingObjectModification : floatingObjectModifications) { - Serializable newValue = floatingObjectModification.getNewValue(); - dto.set(floatingObjectModification.getPropertyName(), newValue); + public Optional<FloatingObjectConsolidateResult> build() { + boolean noModification = modifications.isEmpty(); + return Optional.ofNullable(noModification ? null : new FloatingObjectConsolidateResult(modifications)); } + + public void flush(BeanMonitor monitor) { + DataDto dcp = (DataDto) monitor.getBean(); + for (String modifiedProperty : monitor.getModifiedProperties()) { + JavaBeanPropertyModification element = new JavaBeanPropertyModification(dcp, modifiedProperty); + modifications.add(element); + } + } + } + + FloatingObjectConsolidateResult(Set<JavaBeanPropertyModification> modifications) { + this.modifications = modifications; + } + + public Set<JavaBeanPropertyModification> getModifications() { + return modifications; + } + + public void flushToBean(JavaBean dto) { + modifications.forEach(modification -> modification.flushToBean(dto)); } } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/dcp/consolidate/FloatingObjectResultConsolidateBuilder.java deleted ===================================== @@ -1,52 +0,0 @@ -package fr.ird.observe.dto.data.ps.dcp.consolidate; - -/*- - * #%L - * ObServe Core :: API :: Dto - * %% - * Copyright (C) 2008 - 2023 IRD, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - - -import fr.ird.observe.dto.DtoPropertyModification; -import fr.ird.observe.dto.data.DataDto; - -import java.util.LinkedHashSet; -import java.util.Optional; -import java.util.Set; - -/** - * @author Tony Chemit - dev@tchemit.fr - * @since 7.0 - */ -public class FloatingObjectResultConsolidateBuilder { - - private final Set<DtoPropertyModification> modifications = new LinkedHashSet<>(); - - public Optional<FloatingObjectConsolidateResult> build() { - boolean noModification = modifications.isEmpty(); - return Optional.ofNullable(noModification ? null : new FloatingObjectConsolidateResult(modifications)); - } - - void flushDcpModification(DataDto dcp, String... propertyNamesModified) { - for (String modifiedProperty : propertyNamesModified) { - DtoPropertyModification element = new DtoPropertyModification(dcp, modifiedProperty); - modifications.add(element); - } - } -} ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/localmarket/consolidate/BatchConsolidateResult.java ===================================== @@ -22,8 +22,9 @@ package fr.ird.observe.dto.data.ps.localmarket.consolidate; * #L% */ -import fr.ird.observe.dto.DtoPropertyModification; import fr.ird.observe.dto.DtoPropertyModifications; +import fr.ird.observe.dto.JavaBeanPropertyModification; +import fr.ird.observe.dto.ProtectedIdsPs; import fr.ird.observe.dto.data.ps.localmarket.BatchDto; import fr.ird.observe.dto.data.ps.localmarket.BatchWeightComputedValueSource; import fr.ird.observe.dto.referential.common.SpeciesReference; @@ -65,7 +66,7 @@ public class BatchConsolidateResult extends DtoPropertyModifications { } @Override - protected BatchConsolidateResult createResult(String id, String label, Set<DtoPropertyModification> modifications, String lengthWeightParameterNotFound) { + protected BatchConsolidateResult createResult(String id, String label, Set<JavaBeanPropertyModification> modifications, String lengthWeightParameterNotFound) { return new BatchConsolidateResult(id, label, modifications, lengthWeightParameterNotFound); } @@ -83,12 +84,12 @@ public class BatchConsolidateResult extends DtoPropertyModifications { BatchWeightTypeReference batchWeightType = dto.getPackaging().getBatchWeightType(); Integer count = dto.getCount(); switch (batchWeightType.getId()) { - case "fr.ird.referential.ps.localmarket.BatchWeightType#1464000000000#01": + case ProtectedIdsPs.PS_LOCAL_MARKET_BATCH_WEIGHT_TYPE_WEIGHING: // pesée poids direct // P = batch.weight // donc rien à faire break; - case "fr.ird.referential.ps.localmarket.BatchWeightType#1464000000000#02": + case ProtectedIdsPs.PS_LOCAL_MARKET_BATCH_WEIGHT_TYPE_SINGLE_SPECIES_INDIVIDUAL: // espèce unité // P = poids moyen de l'espèce * batch.count / 1000 // ocean = océan de débarquement de la marée = ps_common.trip.ocean @@ -113,7 +114,7 @@ public class BatchConsolidateResult extends DtoPropertyModifications { }); } break; - case "fr.ird.referential.ps.localmarket.BatchWeightType#1464000000000#03": + case ProtectedIdsPs.PS_LOCAL_MARKET_BATCH_WEIGHT_TYPE_PACKAGING_NOT_WEIGHTED: // Paquet/Conditionnement non pesé // P = batch.packaging.meanWeight * batch.count (ou null si pas de packaging.meanWeight) if (count != null) { @@ -132,7 +133,7 @@ public class BatchConsolidateResult extends DtoPropertyModifications { return new BatchConsolidateResultBuilder(rtpMeanWeightFinder); } - BatchConsolidateResult(String batchId, String batchLabel, Set<DtoPropertyModification> modifications, String lengthWeightParameterNotFound) { + BatchConsolidateResult(String batchId, String batchLabel, Set<JavaBeanPropertyModification> modifications, String lengthWeightParameterNotFound) { super(batchId, batchLabel, modifications, lengthWeightParameterNotFound); } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/consolidate/ActivityConsolidateResult.java ===================================== @@ -23,7 +23,7 @@ package fr.ird.observe.dto.data.ps.observation.consolidate; */ -import fr.ird.observe.dto.DtoPropertyModification; +import fr.ird.observe.dto.JavaBeanPropertyModification; import fr.ird.observe.dto.ObserveDto; import java.io.Serializable; @@ -63,17 +63,17 @@ public class ActivityConsolidateResult implements Serializable, ObserveDto { private String newSchoolType; /** - * L'ensemble des modifications sur les échantillons. + * All modification on samples. */ - private Set<SampleMeasureModification> sampleMeasureModifications; + private Set<JavaBeanPropertyModification> sampleMeasureModifications; /** - * L'ensemble des modifications sur les captures non cibles. + * All modification on catches. */ - private Set<CatchModification> catchModifications; + private Set<JavaBeanPropertyModification> catchModifications; /** - * L'ensemble des modifications sur les objets flottants. + * All modification on floating objects. */ - private Set<DtoPropertyModification> floatingObjectModifications; + private Set<JavaBeanPropertyModification> floatingObjectModifications; private Set<String> lengthWeightParameterNotFound ; private Set<String> lengthLengthParameterNotFound; @@ -94,27 +94,27 @@ public class ActivityConsolidateResult implements Serializable, ObserveDto { this.activityLabel = activityLabel; } - public Set<SampleMeasureModification> getSampleMeasureModifications() { + public Set<JavaBeanPropertyModification> getSampleMeasureModifications() { return sampleMeasureModifications; } - public void setSampleMeasureModifications(Set<SampleMeasureModification> sampleMeasureModifications) { + public void setSampleMeasureModifications(Set<JavaBeanPropertyModification> sampleMeasureModifications) { this.sampleMeasureModifications = sampleMeasureModifications; } - public Set<CatchModification> getCatchModifications() { + public Set<JavaBeanPropertyModification> getCatchModifications() { return catchModifications; } - public void setCatchModifications(Set<CatchModification> catchModifications) { + public void setCatchModifications(Set<JavaBeanPropertyModification> catchModifications) { this.catchModifications = catchModifications; } - public Set<DtoPropertyModification> getFloatingObjectModifications() { + public Set<JavaBeanPropertyModification> getFloatingObjectModifications() { return floatingObjectModifications; } - public void setFloatingObjectModifications(Set<DtoPropertyModification> floatingObjectModifications) { + public void setFloatingObjectModifications(Set<JavaBeanPropertyModification> floatingObjectModifications) { this.floatingObjectModifications = floatingObjectModifications; } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/consolidate/CatchModification.java deleted ===================================== @@ -1,71 +0,0 @@ -package fr.ird.observe.dto.data.ps.observation.consolidate; - -/*- - * #%L - * ObServe Core :: API :: Dto - * %% - * Copyright (C) 2008 - 2023 IRD, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import java.io.Serializable; - -/** - * Created by tchemit on 04/08/17. - * - * @author Tony Chemit - dev@tchemit.fr - */ -public class CatchModification implements Serializable { - - private static final long serialVersionUID = 1L; - protected String speciesLabel; - protected String propertyName; - protected Number newValue; - String catchId; - - public String getCatchCatchId() { - return catchId; - } - - public String getSpeciesLabel() { - return speciesLabel; - } - - public String getPropertyName() { - return propertyName; - } - - public Number getNewValue() { - return newValue; - } - - public void setCatchId(String catchId) { - this.catchId = catchId; - } - - public void setSpeciesLabel(String speciesLabel) { - this.speciesLabel = speciesLabel; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public void setNewValue(Number newValue) { - this.newValue = newValue; - } -} ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ps/observation/consolidate/SampleMeasureModification.java deleted ===================================== @@ -1,71 +0,0 @@ -package fr.ird.observe.dto.data.ps.observation.consolidate; - -/*- - * #%L - * ObServe Core :: API :: Dto - * %% - * Copyright (C) 2008 - 2023 IRD, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import java.io.Serializable; - -/** - * Created by tchemit on 04/08/17. - * - * @author Tony Chemit - dev@tchemit.fr - */ -public class SampleMeasureModification implements Serializable { - - private static final long serialVersionUID = 1L; - protected String speciesLabel; - protected String propertyName; - protected Float newValue; - private String id; - - public String getId() { - return id; - } - - public String getSpeciesLabel() { - return speciesLabel; - } - - public String getPropertyName() { - return propertyName; - } - - public Float getNewValue() { - return newValue; - } - - public void setId(String id) { - this.id = id; - } - - public void setSpeciesLabel(String speciesLabel) { - this.speciesLabel = speciesLabel; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public void setNewValue(Float newValue) { - this.newValue = newValue; - } -} ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripConsolidateEngine.java ===================================== @@ -162,7 +162,7 @@ public class TripConsolidateEngine { // add to result localmarketBatchResults.add(r); // flush back to entity - r.flushToDto(batch); + r.flushToBean(batch); }); } @@ -193,11 +193,11 @@ public class TripConsolidateEngine { activityContext.daoSupplier = (ObserveTopiaDaoSupplier) persistenceContext; activityContext.resultBuilder = resultBuilder; activityContext.trip = trip; - activityContext.routeObs = route; - activityContext.activityObs = activity; - activityContext.sampleMeasureObsMonitor = sampleMeasureMonitor; - activityContext.sampleObsMonitor = sampleMonitor; - activityContext.catchObsMonitor = catchMonitor; + activityContext.route = route; + activityContext.activity = activity; + activityContext.sampleMeasureMonitor = sampleMeasureMonitor; + activityContext.sampleMonitor = sampleMonitor; + activityContext.catchMonitor = catchMonitor; activityContext.floatingObjectConsolidateEngine = floatingObjectConsolidateEngine; activityContext.activityPrefix = activityPrefix; try { @@ -228,11 +228,11 @@ public class TripConsolidateEngine { } private void consolidateActivity(ActivityConsolidateContext activityContext) { - Activity activity = activityContext.activityObs; + Activity activity = activityContext.activity; log.debug(String.format("%s Start consolidate activity: %s", activityContext.activityPrefix, activity.getTopiaId())); if (activity.isFloatingObjectNotEmpty()) { - for (FloatingObject dcp : activity.getFloatingObject()) { - updateDcp(dcp, activityContext); + for (FloatingObject floatingObject : activity.getFloatingObject()) { + updateFloatingObject(floatingObject, activityContext); } } Set set = activity.getSet(); @@ -249,22 +249,17 @@ public class TripConsolidateEngine { activityContext.setSchoolTypeChanged(oldSchoolType == null ? null : oldSchoolType.getTopiaId(), newSchoolTypeId); } if (set.isSampleNotEmpty()) { - // des échantillons trouves for (Sample sample : set.getSample()) { if (sample.isSampleMeasureNotEmpty()) { for (SampleMeasure sampleMeasure : sample.getSampleMeasure()) { activityContext.watchSampleMeasure(sampleMeasure); - updateLengthWeightAble(activityContext, - sampleMeasure.getSpecies(), - /* pas de sexe precise */ - sampleMeasure); + updateLengthWeightAble(activityContext, sampleMeasure.getSpecies(), sampleMeasure); activityContext.flushSampleMeasure(); } } } } if (set.isCatchesNotEmpty()) { - // des captures trouves for (Catch aCatch : set.getCatches()) { activityContext.watchCatch(aCatch); updateCatch(activityContext, aCatch); @@ -274,11 +269,11 @@ public class TripConsolidateEngine { } } - private void updateDcp(FloatingObject dcp, ActivityConsolidateContext activityContext) { + private void updateFloatingObject(FloatingObject floatingObject, ActivityConsolidateContext activityContext) { - if (dcp.getObjectOperation() == null) { + if (floatingObject.getObjectOperation() == null) { log.warn("**********************"); - log.warn(String.format("Floating object %s has no object operation....", dcp.getTopiaId())); + log.warn(String.format("Floating object %s has no object operation....", floatingObject.getTopiaId())); log.warn("**********************"); return; } @@ -286,22 +281,27 @@ public class TripConsolidateEngine { ReferentialLocale referentialLocale = context.getReferentialLocale(); - FloatingObjectDto floatingObjectDto = FloatingObject.toDto(referentialLocale, dcp); + FloatingObjectDto floatingObjectDto = FloatingObject.toDto(referentialLocale, floatingObject); - java.util.Set<FloatingObjectPartDto> floatingObjectPartSet = new LinkedHashSet<>(FloatingObjectPart.SPI.toDataDtoList(referentialLocale, dcp.getFloatingObjectPart())); + java.util.Set<FloatingObjectPartDto> floatingObjectPartSet = new LinkedHashSet<>(FloatingObjectPart.SPI.toDataDtoList(referentialLocale, floatingObject.getFloatingObjectPart())); FloatingObjectConsolidateRequest request = new FloatingObjectConsolidateRequest(floatingObjectDto, floatingObjectPartSet); Optional<FloatingObjectConsolidateResult> result = floatingObjectConsolidateEngine.consolidate(request); - result.ifPresent(r -> activityContext.flushDcp(dcp, r)); + result.ifPresent(r -> { + // flush to main result + activityContext.flushFloatingObject(r); + // flush back modifications detected to entity + r.flushToBean(floatingObject); + }); if (request.isNeedClean()) { log.warn("**********************"); - log.warn(String.format("Floating object %s has some bad parts, this will be fixed here....", dcp.getTopiaId())); + log.warn(String.format("Floating object %s has some bad parts, this will be fixed here....", floatingObject.getTopiaId())); log.warn("**********************"); // Need to clean dcp parts - boolean notWhenArriving = !dcp.getObjectOperation().isWhenArriving(); - boolean notWhenLeaving = !dcp.getObjectOperation().isWhenLeaving(); - for (FloatingObjectPart floatingObjectPart : dcp.getFloatingObjectPart()) { + boolean notWhenArriving = !floatingObject.getObjectOperation().isWhenArriving(); + boolean notWhenLeaving = !floatingObject.getObjectOperation().isWhenLeaving(); + for (FloatingObjectPart floatingObjectPart : floatingObject.getFloatingObjectPart()) { if (floatingObjectPart.getWhenArriving() != null && notWhenArriving) { log.info(String.format("Set whenArriving to null for part: %s", floatingObjectPart.getTopiaId())); floatingObjectPart.setWhenArriving(null); @@ -333,7 +333,7 @@ public class TripConsolidateEngine { // récupération des échantillon de cette espèce sur les calée // on recherche sur le couple species/speciesFate (ou sur le couple species/null) - Collection<SampleMeasure> sampleMeasures = getSampleMeasures(activityContext.getSetObs(), species, aCatch.getSpeciesFate()); + Collection<SampleMeasure> sampleMeasures = getSampleMeasures(activityContext.getSet(), species, aCatch.getSpeciesFate()); if (aCatch.getCatchWeight() != null || aCatch.getTotalCount() != null) { // -- Cas n°2 (pas de taille / poids moyen mais au moins un des deux taille / poids) @@ -448,11 +448,11 @@ public class TripConsolidateEngine { private void computeCatchMeanValues(Catch aCatch, LengthWeightParameter lengthWeightParameter) { if (lengthWeightParameter != null) { - if (aCatch.getMeanLength() == null) { + if (aCatch.getMeanLength() == null && lengthWeightParameter.getMeanLength() != null) { aCatch.setMeanLength(lengthWeightParameter.getMeanLength()); aCatch.setMeanLengthComputedSource(CatchComputedValueSource.fromReferentiel); } - if (aCatch.getMeanWeight() == null) { + if (aCatch.getMeanWeight() == null && lengthWeightParameter.getMeanWeight() != null) { aCatch.setMeanWeight(lengthWeightParameter.getMeanWeight()); aCatch.setMeanWeightComputedSource(CatchComputedValueSource.fromReferentiel); } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityConsolidateContext.java ===================================== @@ -23,11 +23,8 @@ package fr.ird.observe.entities.data.ps.observation; */ import fr.ird.observe.decoration.DecoratorService; -import fr.ird.observe.dto.DtoPropertyModification; -import fr.ird.observe.dto.data.ps.DcpComputedValue; import fr.ird.observe.dto.data.ps.dcp.consolidate.FloatingObjectConsolidateEngine; import fr.ird.observe.dto.data.ps.dcp.consolidate.FloatingObjectConsolidateResult; -import fr.ird.observe.dto.data.ps.observation.FloatingObjectDto; import fr.ird.observe.entities.ObserveTopiaDaoSupplier; import fr.ird.observe.entities.data.ps.common.Trip; import fr.ird.observe.entities.referential.LengthLengthParameterNotFoundException; @@ -55,8 +52,8 @@ public class ActivityConsolidateContext { public Locale locale; public Trip trip; - public fr.ird.observe.entities.data.ps.observation.Route routeObs; - public fr.ird.observe.entities.data.ps.observation.Activity activityObs; + public fr.ird.observe.entities.data.ps.observation.Route route; + public fr.ird.observe.entities.data.ps.observation.Activity activity; public ObserveTopiaDaoSupplier daoSupplier; public boolean failIfLengthWeightParameterNotFound; public boolean failIfLengthLengthParameterNotFound; @@ -64,25 +61,25 @@ public class ActivityConsolidateContext { public String activityPrefix; public ActivityConsolidateResultBuilder resultBuilder; public FloatingObjectConsolidateEngine floatingObjectConsolidateEngine; - public BeanMonitor sampleObsMonitor; - public BeanMonitor sampleMeasureObsMonitor; - public BeanMonitor catchObsMonitor; + public BeanMonitor sampleMonitor; + public BeanMonitor sampleMeasureMonitor; + public BeanMonitor catchMonitor; public Ocean getOcean() { return trip.getOcean(); } - public Date getRouteObsDate() { - return routeObs.getDate(); + public Date getRouteDate() { + return route.getDate(); } - public fr.ird.observe.entities.data.ps.observation.Set getSetObs() { - return activityObs.getSet(); + public fr.ird.observe.entities.data.ps.observation.Set getSet() { + return activity.getSet(); } public Optional<LengthWeightParameter> findLengthWeightParameter(Species species, Sex sex, SizeMeasureType sizeMeasureType) { Ocean ocean = getOcean(); - Date routeDate = getRouteObsDate(); + Date routeDate = getRouteDate(); try { return Optional.ofNullable(LengthWeightParameters.findLengthWeightParameter(decoratorService, daoSupplier, species, sex, ocean, routeDate, sizeMeasureType)); } catch (LengthWeightParameterNotFoundException e) { @@ -96,7 +93,7 @@ public class ActivityConsolidateContext { public Optional<LengthLengthParameter> findLengthLengthParameter(Species species, Sex sex, SizeMeasureType inputSizeMeasureType, SizeMeasureType outputSizeMeasureType) { Ocean ocean = getOcean(); - Date routeDate = getRouteObsDate(); + Date routeDate = getRouteDate(); try { return LengthLengthParameters.findLengthLengthParameter(decoratorService, daoSupplier, species, ocean, sex, routeDate, inputSizeMeasureType, outputSizeMeasureType); } catch (LengthLengthParameterNotFoundException e) { @@ -113,14 +110,12 @@ public class ActivityConsolidateContext { } public void watchSampleMeasure(SampleMeasure sampleMeasure) { - sampleMeasureObsMonitor.setBean(sampleMeasure); + sampleMeasureMonitor.setBean(sampleMeasure); if (sampleMeasure.isIsLengthComputed()) { - // Reset de la valeur calculée sampleMeasure.setLength(null); sampleMeasure.setIsLengthComputed(false); } if (sampleMeasure.isIsWeightComputed()) { - // Reset de la valeur calculée sampleMeasure.setWeight(null); sampleMeasure.setIsWeightComputed(false); } @@ -128,15 +123,15 @@ public class ActivityConsolidateContext { public void flushSampleMeasure() { - if (sampleMeasureObsMonitor.wasModified()) { - SampleMeasure sampleMeasure = (SampleMeasure) sampleMeasureObsMonitor.getBean(); - resultBuilder.flushSampleMeasureModification(sampleMeasure, sampleMeasureObsMonitor.getModifiedProperties()); + if (sampleMeasureMonitor.wasModified()) { + SampleMeasure sampleMeasure = (SampleMeasure) sampleMeasureMonitor.getBean(); + resultBuilder.flushSampleMeasureModification(sampleMeasure, sampleMeasureMonitor.getModifiedProperties()); } - sampleMeasureObsMonitor.setBean(null); + sampleMeasureMonitor.setBean(null); } public void watchCatch(Catch aCatch) { - catchObsMonitor.setBean(aCatch); + catchMonitor.setBean(aCatch); if (aCatch.isCatchWeightComputed()) { aCatch.setCatchWeight(null); aCatch.setCatchWeightComputedSource(null); @@ -156,50 +151,15 @@ public class ActivityConsolidateContext { } public void flushCatch() { - if (catchObsMonitor.wasModified()) { - Catch aCatch = (Catch) catchObsMonitor.getBean(); - resultBuilder.flushCatchModification(aCatch, catchObsMonitor.getModifiedProperties()); + if (catchMonitor.wasModified()) { + Catch aCatch = (Catch) catchMonitor.getBean(); + resultBuilder.flushCatchModification(aCatch, catchMonitor.getModifiedProperties()); } - catchObsMonitor.setBean(null); + catchMonitor.setBean(null); } - public void flushDcp(FloatingObject dcp, FloatingObjectConsolidateResult floatingObjectConsolidateResult) { - resultBuilder.flushDcpModification(floatingObjectConsolidateResult); - for (DtoPropertyModification floatingObjectModification : floatingObjectConsolidateResult.getFloatingObjectModifications()) { - String modifiedProperty = floatingObjectModification.getPropertyName(); - switch (modifiedProperty) { - case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE: { - - dcp.setComputedWhenArrivingBiodegradable((DcpComputedValue) floatingObjectModification.getNewValue()); - break; - } - case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING: { - - dcp.setComputedWhenArrivingNonEntangling((DcpComputedValue) floatingObjectModification.getNewValue()); - break; - } - case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE: { - - dcp.setComputedWhenArrivingSimplifiedObjectType((String) floatingObjectModification.getNewValue()); - break; - } - case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE: { - - dcp.setComputedWhenLeavingBiodegradable((DcpComputedValue) floatingObjectModification.getNewValue()); - break; - } - case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING: { - - dcp.setComputedWhenLeavingNonEntangling((DcpComputedValue) floatingObjectModification.getNewValue()); - break; - } - case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE: { - - dcp.setComputedWhenLeavingSimplifiedObjectType((String) floatingObjectModification.getNewValue()); - break; - } - } - } + public void flushFloatingObject(FloatingObjectConsolidateResult floatingObjectConsolidateResult) { + resultBuilder.flushFloatingObjectModification(floatingObjectConsolidateResult); } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityConsolidateResultBuilder.java ===================================== @@ -22,11 +22,9 @@ package fr.ird.observe.entities.data.ps.observation; * #L% */ -import fr.ird.observe.dto.DtoPropertyModification; +import fr.ird.observe.dto.JavaBeanPropertyModification; import fr.ird.observe.dto.data.ps.dcp.consolidate.FloatingObjectConsolidateResult; -import fr.ird.observe.dto.data.ps.observation.consolidate.CatchModification; import fr.ird.observe.dto.data.ps.observation.consolidate.ActivityConsolidateResult; -import fr.ird.observe.dto.data.ps.observation.consolidate.SampleMeasureModification; import fr.ird.observe.dto.referential.I18nReferentialHelper; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.entities.referential.common.Ocean; @@ -58,49 +56,46 @@ public class ActivityConsolidateResultBuilder { private final ReferentialLocale referenceLocale; private final Set<String> lengthWeightParameterNotFoundBuilder = new LinkedHashSet<>(); private final Set<String> lengthLengthParameterNotFoundBuilder = new LinkedHashSet<>(); - private final Set<SampleMeasureModification> sampleMeasureObsModificationBuilder = new LinkedHashSet<>(); - private final Set<CatchModification> catchObsModificationBuilder = new LinkedHashSet<>(); - private final Set<DtoPropertyModification> dcpModificationBuilder = new LinkedHashSet<>(); - private final String activitySeineLabel; - private final String activitySeineId; + private final Set<JavaBeanPropertyModification> sampleMeasureModificationBuilder = new LinkedHashSet<>(); + private final Set<JavaBeanPropertyModification> catchModificationBuilder = new LinkedHashSet<>(); + private final Set<JavaBeanPropertyModification> floatingObjectModificationBuilder = new LinkedHashSet<>(); + private final String activityLabel; + private final String activityId; private String oldSchoolType; private String newSchoolType; - public ActivityConsolidateResultBuilder(Locale locale, ReferentialLocale referenceLocale, String activitySeineId, String activitySeineLabel) { + public ActivityConsolidateResultBuilder(Locale locale, ReferentialLocale referenceLocale, String activityId, String activityLabel) { this.locale = locale; this.referenceLocale = referenceLocale; - this.activitySeineId = activitySeineId; - this.activitySeineLabel = activitySeineLabel; + this.activityId = activityId; + this.activityLabel = activityLabel; } public Optional<ActivityConsolidateResult> build() { - Set<SampleMeasureModification> sampleMeasureObsModifications = sampleMeasureObsModificationBuilder; - Set<CatchModification> catchObsModifications = catchObsModificationBuilder; - Set<DtoPropertyModification> floatingObjectModifications = dcpModificationBuilder; + Set<JavaBeanPropertyModification> sampleMeasureModifications = sampleMeasureModificationBuilder; + Set<JavaBeanPropertyModification> catchModifications = catchModificationBuilder; + Set<JavaBeanPropertyModification> floatingObjectModifications = floatingObjectModificationBuilder; - boolean noModification = (sampleMeasureObsModifications.isEmpty() - && catchObsModifications.isEmpty() + boolean noModification = sampleMeasureModifications.isEmpty() + && catchModifications.isEmpty() && floatingObjectModifications.isEmpty() - && newSchoolType == null); + && newSchoolType == null; - ActivityConsolidateResult consolidateActivitySeineObsDataResult; if (noModification) { - consolidateActivitySeineObsDataResult = null; - } else { - consolidateActivitySeineObsDataResult = new ActivityConsolidateResult(); - consolidateActivitySeineObsDataResult.setActivityId(activitySeineId); - consolidateActivitySeineObsDataResult.setActivityLabel(activitySeineLabel); - if (newSchoolType != null) { - consolidateActivitySeineObsDataResult.setSchoolTypeChanged(oldSchoolType, newSchoolType); - } - consolidateActivitySeineObsDataResult.setSampleMeasureModifications(sampleMeasureObsModifications); - consolidateActivitySeineObsDataResult.setCatchModifications(catchObsModifications); - consolidateActivitySeineObsDataResult.setFloatingObjectModifications(floatingObjectModifications); - consolidateActivitySeineObsDataResult.setFloatingObjectModifications(floatingObjectModifications); - consolidateActivitySeineObsDataResult.setLengthLengthParameterNotFound(getLengthLengthParameterNotFoundBuilder()); - consolidateActivitySeineObsDataResult.setLengthWeightParameterNotFound(getLengthWeightParameterNotFoundBuilder()); + return Optional.empty(); + } + ActivityConsolidateResult result = new ActivityConsolidateResult(); + result.setActivityId(activityId); + result.setActivityLabel(activityLabel); + if (newSchoolType != null) { + result.setSchoolTypeChanged(oldSchoolType, newSchoolType); } - return Optional.ofNullable(consolidateActivitySeineObsDataResult); + result.setSampleMeasureModifications(sampleMeasureModifications); + result.setCatchModifications(catchModifications); + result.setFloatingObjectModifications(floatingObjectModifications); + result.setLengthLengthParameterNotFound(getLengthLengthParameterNotFoundBuilder()); + result.setLengthWeightParameterNotFound(getLengthWeightParameterNotFoundBuilder()); + return Optional.of(result); } public Set<String> getLengthWeightParameterNotFoundBuilder() { @@ -111,90 +106,22 @@ public class ActivityConsolidateResultBuilder { return lengthLengthParameterNotFoundBuilder; } - void flushDcpModification(FloatingObjectConsolidateResult result) { - dcpModificationBuilder.addAll(result.getFloatingObjectModifications()); + void flushFloatingObjectModification(FloatingObjectConsolidateResult result) { + floatingObjectModificationBuilder.addAll(result.getModifications()); } - void flushSampleMeasureModification(SampleMeasure targetLength, String... propertyNamesModified) { - - Species species = targetLength.getSpecies(); - String speciesLabel = decorate(species); + void flushSampleMeasureModification(SampleMeasure sampleMeasure, String... propertyNamesModified) { for (String modifiedProperty : propertyNamesModified) { - if (modifiedProperty.equals(SampleMeasure.PROPERTY_LENGTH)) { - SampleMeasureModification element = new SampleMeasureModification(); - element.setId(targetLength.getTopiaId()); - element.setSpeciesLabel(speciesLabel); - element.setPropertyName(SampleMeasure.PROPERTY_LENGTH); - element.setNewValue(targetLength.getLength()); - sampleMeasureObsModificationBuilder.add(element); - } else if (modifiedProperty.equals(SampleMeasure.PROPERTY_WEIGHT)) { - SampleMeasureModification element = new SampleMeasureModification(); - element.setId(targetLength.getTopiaId()); - element.setSpeciesLabel(speciesLabel); - element.setPropertyName(SampleMeasure.PROPERTY_LENGTH); - element.setNewValue(targetLength.getLength()); - sampleMeasureObsModificationBuilder.add(element); - } + JavaBeanPropertyModification element = new JavaBeanPropertyModification(sampleMeasure, modifiedProperty); + sampleMeasureModificationBuilder.add(element); } } void flushCatchModification(Catch aCatch, String... propertyNamesModified) { - - Species species = aCatch.getSpecies(); - String speciesLabel = decorate(species); for (String modifiedProperty : propertyNamesModified) { - switch (modifiedProperty) { - case Catch.PROPERTY_MEAN_LENGTH: { - - CatchModification element = new CatchModification(); - element.setCatchId(aCatch.getTopiaId()); - element.setSpeciesLabel(speciesLabel); - element.setPropertyName(Catch.PROPERTY_MEAN_LENGTH); - element.setNewValue(aCatch.getMeanLength()); -// element.computeValueSource = I18nEnumUtil.getLabel(locale, aCatches.getMeanLengthComputedSource()); - catchObsModificationBuilder.add(element); - - break; - } - case Catch.PROPERTY_MEAN_WEIGHT: { - - CatchModification element = new CatchModification(); - element.setCatchId(aCatch.getTopiaId()); - element.setSpeciesLabel(speciesLabel); - element.setPropertyName(Catch.PROPERTY_MEAN_WEIGHT); - element.setNewValue(aCatch.getMeanWeight()); -// element.computeValueSource = I18nEnumUtil.getLabel(locale, aCatches.getMeanWeightComputedSource()); - catchObsModificationBuilder.add(element); - - break; - } - case Catch.PROPERTY_CATCH_WEIGHT: { - - CatchModification element = new CatchModification(); - element.setCatchId(aCatch.getTopiaId()); - element.setSpeciesLabel(speciesLabel); - element.setPropertyName(Catch.PROPERTY_CATCH_WEIGHT); - element.setNewValue(aCatch.getCatchWeight()); -// element.computeValueSource = I18nEnumUtil.getLabel(locale, aCatches.getCatchWeightComputedSource()); - catchObsModificationBuilder.add(element); - - break; - } - case Catch.PROPERTY_TOTAL_COUNT: { - - CatchModification element = new CatchModification(); - element.setCatchId(aCatch.getTopiaId()); - element.setSpeciesLabel(speciesLabel); - element.setPropertyName(Catch.PROPERTY_TOTAL_COUNT); - element.setNewValue(aCatch.getTotalCount()); -// element.computeValueSource = I18nEnumUtil.getLabel(locale, aCatches.getTotalCountComputedSource()); - catchObsModificationBuilder.add(element); - - break; - } - } + JavaBeanPropertyModification element = new JavaBeanPropertyModification(aCatch, modifiedProperty); + catchModificationBuilder.add(element); } - } ActivityConsolidateResultBuilder registerLengthWeightParameterNotFound(Species species, Ocean ocean, Sex sex, Date routeDate) { @@ -228,6 +155,7 @@ public class ActivityConsolidateResultBuilder { this.newSchoolType = newSchoolType; return this; } + //FIXME use decorator private String decorate(Species species) { StringBuilder builder = new StringBuilder(); ===================================== core/services/test/src/main/java/fr/ird/observe/services/service/data/ps/ConsolidateDataServiceFixtures.java ===================================== @@ -68,8 +68,8 @@ public class ConsolidateDataServiceFixtures extends GeneratedConsolidateDataServ Optional<FloatingObjectConsolidateResult> optionalResult = engine.consolidate(request); Assert.assertTrue(optionalResult.isPresent()); FloatingObjectConsolidateResult result = optionalResult.get(); - Assert.assertNotNull(result.getFloatingObjectModifications()); - Assert.assertEquals(getIntegerProperty("consolidateFloatingObjectLogbook.count"), result.getFloatingObjectModifications().size()); + Assert.assertNotNull(result.getModifications()); + Assert.assertEquals(getIntegerProperty("consolidateFloatingObjectLogbook.count"), result.getModifications().size()); } { String id = getProperty("consolidateFloatingObjectObservation.id"); @@ -84,8 +84,8 @@ public class ConsolidateDataServiceFixtures extends GeneratedConsolidateDataServ Optional<FloatingObjectConsolidateResult> optionalResult = engine.consolidate(request); Assert.assertTrue(optionalResult.isPresent()); FloatingObjectConsolidateResult result = optionalResult.get(); - Assert.assertNotNull(result.getFloatingObjectModifications()); - Assert.assertEquals(getIntegerProperty("consolidateFloatingObjectObservation.count"), result.getFloatingObjectModifications().size()); + Assert.assertNotNull(result.getModifications()); + Assert.assertEquals(getIntegerProperty("consolidateFloatingObjectObservation.count"), result.getModifications().size()); } } ===================================== toolkit/api/src/main/java/fr/ird/observe/dto/DtoPropertyModifications.java ===================================== @@ -24,10 +24,10 @@ package fr.ird.observe.dto; import io.ultreia.java4all.bean.JavaBean; import io.ultreia.java4all.bean.monitor.BeanMonitor; +import io.ultreia.java4all.util.json.JsonAware; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.io.Serializable; import java.util.LinkedHashSet; import java.util.Optional; import java.util.Set; @@ -38,17 +38,17 @@ import java.util.Set; * @author Tony Chemit - dev@tchemit.fr * @since 9.0.0 */ -public class DtoPropertyModifications implements ObserveDto { +public class DtoPropertyModifications implements JsonAware { private static final Logger log = LogManager.getLogger(DtoPropertyModifications.class); private final String id; private final String label; - private final Set<DtoPropertyModification> properties; + private final Set<JavaBeanPropertyModification> properties; private final String lengthWeightParameterNotFound; public static abstract class Builder<R extends DtoPropertyModifications> { private final BeanMonitor monitor; - private final Set<DtoPropertyModification> modifications = new LinkedHashSet<>(); + private final Set<JavaBeanPropertyModification> modifications = new LinkedHashSet<>(); private String id; private String label; private String lengthWeightParameterNotFound; @@ -57,7 +57,7 @@ public class DtoPropertyModifications implements ObserveDto { monitor = new BeanMonitor(propertyNames); } - protected void watch(IdDto dto) { + protected void watch(JavaBean dto) { modifications.clear(); id = label = lengthWeightParameterNotFound = null; monitor.setBean(dto); @@ -80,13 +80,13 @@ public class DtoPropertyModifications implements ObserveDto { return Optional.of(result); } - protected abstract R createResult(String id, String label, Set<DtoPropertyModification> modifications, String lengthWeightParameterNotFound); + protected abstract R createResult(String id, String label, Set<JavaBeanPropertyModification> modifications, String lengthWeightParameterNotFound); public void flushToResult(IdDto dto, String... propertyNamesModified) { this.id = dto.getId(); this.label = dto.toString(); for (String modifiedProperty : propertyNamesModified) { - DtoPropertyModification element = new DtoPropertyModification(dto, modifiedProperty); + JavaBeanPropertyModification element = new JavaBeanPropertyModification(dto, modifiedProperty); modifications.add(element); } } @@ -99,7 +99,7 @@ public class DtoPropertyModifications implements ObserveDto { } } - public DtoPropertyModifications(String id, String label, Set<DtoPropertyModification> properties, String lengthWeightParameterNotFound) { + public DtoPropertyModifications(String id, String label, Set<JavaBeanPropertyModification> properties, String lengthWeightParameterNotFound) { this.id = id; this.label = label; this.properties = properties; @@ -114,7 +114,7 @@ public class DtoPropertyModifications implements ObserveDto { return label; } - public Set<DtoPropertyModification> getProperties() { + public Set<JavaBeanPropertyModification> getProperties() { return properties; } @@ -122,10 +122,7 @@ public class DtoPropertyModifications implements ObserveDto { return lengthWeightParameterNotFound; } - public void flushToDto(JavaBean dto) { - properties.forEach(modification -> { - Serializable newValue = modification.getNewValue(); - dto.set(modification.getPropertyName(), newValue); - }); + public void flushToBean(JavaBean bean) { + properties.forEach(modification -> modification.flushToBean(bean)); } } ===================================== toolkit/api/src/main/java/fr/ird/observe/dto/DtoPropertyModification.java → toolkit/api/src/main/java/fr/ird/observe/dto/JavaBeanPropertyModification.java ===================================== @@ -22,28 +22,35 @@ package fr.ird.observe.dto; * #L% */ +import io.ultreia.java4all.bean.JavaBean; +import io.ultreia.java4all.util.json.JsonAware; + import java.io.Serializable; import java.util.Objects; /** - * Represents a modification on a property of a {@link IdDto}. + * To keep a javaBean property modification. * <p> - * Created on 30/08/2020. + * Created on 15/02/2023. * * @author Tony Chemit - dev@tchemit.fr - * @since 8.1.0 + * @since 9.0.26 */ -public class DtoPropertyModification implements ObserveDto { +public class JavaBeanPropertyModification implements JsonAware { private final String id; private final String propertyName; private final Serializable newValue; - public DtoPropertyModification(IdDto dto, String propertyName) { + public JavaBeanPropertyModification(IdDto dto, String propertyName) { this(Objects.requireNonNull(dto).getId(), propertyName, dto.get(propertyName)); } - public DtoPropertyModification(String id, String propertyName, Serializable newValue) { + public JavaBeanPropertyModification(JavaBean bean, String propertyName) { + this(bean.get(ToolkitId.PROPERTY_TOOLKIT_ID), propertyName, bean.get(propertyName)); + } + + public JavaBeanPropertyModification(String id, String propertyName, Serializable newValue) { this.id = id; this.propertyName = propertyName; this.newValue = newValue; @@ -61,4 +68,9 @@ public class DtoPropertyModification implements ObserveDto { return newValue; } + public void flushToBean(JavaBean bean) { + Serializable newValue = getNewValue(); + bean.set(getPropertyName(), newValue); + } } + ===================================== toolkit/api/src/main/java/fr/ird/observe/spi/json/toolkit/DtoPropertyModificationAdapter.java → toolkit/api/src/main/java/fr/ird/observe/spi/json/toolkit/JavaBeanPropertyModificationAdapter.java ===================================== @@ -30,7 +30,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; -import fr.ird.observe.dto.DtoPropertyModification; +import fr.ird.observe.dto.JavaBeanPropertyModification; import io.ultreia.java4all.util.json.JsonAdapter; import java.io.Serializable; @@ -43,32 +43,36 @@ import java.lang.reflect.Type; * @since 8.1.0 */ @AutoService(JsonAdapter.class) -public class DtoPropertyModificationAdapter implements JsonDeserializer<DtoPropertyModification>, JsonSerializer<DtoPropertyModification>, JsonAdapter { +public class JavaBeanPropertyModificationAdapter implements JsonDeserializer<JavaBeanPropertyModification>, JsonSerializer<JavaBeanPropertyModification>, JsonAdapter { + + public static final String ID = "id"; + public static final String PROPERTY_NAME = "propertyName"; + public static final String TYPE = "type"; + public static final String NEW_VALUE = "newValue"; + @Override public Class<?> type() { - return DtoPropertyModification.class; + return JavaBeanPropertyModification.class; } - @Override - public DtoPropertyModification deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - JsonObject reportVariableJson = json.getAsJsonObject(); - - String dcpId = context.deserialize(reportVariableJson.get("dcpId"), String.class); - String propertyName = context.deserialize(reportVariableJson.get("propertyName"), String.class); - Class<?> type = context.deserialize(reportVariableJson.get("type"), Class.class); - Serializable newValue1 = context.deserialize(reportVariableJson.get("newValue"), type); - return new DtoPropertyModification(dcpId, propertyName, newValue1); + public JavaBeanPropertyModification deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonObject = json.getAsJsonObject(); + String dcpId = context.deserialize(jsonObject.get(ID), String.class); + String propertyName = context.deserialize(jsonObject.get(PROPERTY_NAME), String.class); + Class<?> type = context.deserialize(jsonObject.get(TYPE), Class.class); + Serializable newValue = context.deserialize(jsonObject.get(NEW_VALUE), type); + return new JavaBeanPropertyModification(dcpId, propertyName, newValue); } @Override - public JsonElement serialize(DtoPropertyModification src, Type typeOfSrc, JsonSerializationContext context) { + public JsonElement serialize(JavaBeanPropertyModification src, Type typeOfSrc, JsonSerializationContext context) { JsonObject result = new JsonObject(); - result.add("dcpId", context.serialize(src.getId())); - result.add("propertyName", context.serialize(src.getPropertyName())); + result.add(ID, context.serialize(src.getId())); + result.add(PROPERTY_NAME, context.serialize(src.getPropertyName())); Serializable newValue = src.getNewValue(); - result.add("type", context.serialize(newValue == null ? String.class : newValue.getClass())); - result.add("newValue", context.serialize(newValue)); + result.add(TYPE, context.serialize(newValue == null ? String.class : newValue.getClass())); + result.add(NEW_VALUE, context.serialize(newValue)); return result; } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/46e0163d062c9d04e71e3b6af0... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/46e0163d062c9d04e71e3b6af0... You're receiving this email because of your account on gitlab.com.