Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 58a53683 by Tony CHEMIT at 2017-08-04T23:48:18+02:00 Extraire la consolidation DCP pour pouvoir la rejouer à l'extérieur d'un service (pour par exemple recalculer les valeurs en temps réel) (See #820) - - - - - 23 changed files: - client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java - server/src/main/filtered-resources/mapping - services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java - services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java - services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManagerTest.java → services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/dcp/SimplifiedObjectTypeManagerTest.java - services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java - services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java - services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java - services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java - persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/ObjectMaterialTopiaDao.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResult.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java - services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManager.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java - persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/SimplifiedObjectTypeNode.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java - services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/ConsolidateActivitySeineDataResult.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java - + services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java Changes: ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/consolidate/ConsolidateUIHandler.java @@ -28,7 +28,7 @@ import fr.ird.observe.client.ui.ObserveKeyStrokes; import fr.ird.observe.client.ui.admin.AdminTabUIHandler; import fr.ird.observe.client.ui.util.ProgressModel; import fr.ird.observe.services.dto.reference.DataReference; -import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult; +import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult; import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService; import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataRequest; import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataResult; ===================================== server/src/main/filtered-resources/mapping ===================================== --- a/server/src/main/filtered-resources/mapping +++ b/server/src/main/filtered-resources/mapping @@ -68,6 +68,7 @@ POST /api/v1/LastUpdateDateService/updateReferentialLastUpdateDates GET /api/v1/PingService/getModelVersion v1.PingServiceRestApi.getModelVersion GET /api/v1/PingService/getServerVersion v1.PingServiceRestApi.getServerVersion POST /api/v1/actions/consolidate/ConsolidateDataService/consolidateTripSeine v1.actions.consolidate.ConsolidateDataServiceRestApi.consolidateTripSeine +GET /api/v1/actions/consolidate/ConsolidateDataService/newSimplifiedObjectTypeManager v1.actions.consolidate.ConsolidateDataServiceRestApi.newSimplifiedObjectTypeManager POST /api/v1/actions/report/ReportService/executeReport v1.actions.report.ReportServiceRestApi.executeReport POST /api/v1/actions/report/ReportService/populateVariables v1.actions.report.ReportServiceRestApi.populateVariables GET /api/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffService/getEnabledReferentialReferenceSet v1.actions.synchro.referential.diff.ReferentialSynchronizeDiffServiceRestApi.getEnabledReferentialReferenceSet ===================================== services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java +++ b/services-topia/src/main/java/fr/ird/observe/services/binder/data/seine/FloatingObjectPartBinder.java @@ -57,8 +57,8 @@ public class FloatingObjectPartBinder extends DataBinderSupport<FloatingObjectPa copyEntityDataFieldsToDto(entity, dto); - dto.setWhenArriving(dto.getWhenArriving()); - dto.setWhenLeaving(dto.getWhenLeaving()); + dto.setWhenArriving(entity.getWhenArriving()); + dto.setWhenLeaving(entity.getWhenLeaving()); dto.setObjectMaterial(toReferentialReference(referentialLocale, entity.getObjectMaterial(), ObjectMaterialDto.class)); } ===================================== services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java +++ b/services-topia/src/main/java/fr/ird/observe/services/binder/referential/seine/ObjectMaterialBinder.java @@ -84,7 +84,9 @@ public class ObjectMaterialBinder extends ReferentialBinderSupport<ObjectMateria entity.getCode(), getLabel(referentialLocale, entity), Optional.ofNullable(entity.getParent()).map(ObjectMaterial::getTopiaId).orElse(null), Optional.ofNullable(entity.getObjectMaterialType()).map(I18nReferentialEntity::getTopiaId).orElse(null), - entity.getValidation()); + entity.getValidation(), + entity.isBiodegradable(), + entity.isNonEntangling()); } @@ -97,7 +99,9 @@ public class ObjectMaterialBinder extends ReferentialBinderSupport<ObjectMateria dto.getCode(), getLabel(referentialLocale, dto), Optional.ofNullable(dto.getParent()).map(r -> r.getPropertyValue(ObjectMaterialDto.PROPERTY_PARENT)).orElse(null), Optional.ofNullable(dto.getObjectMaterialType()).map(ReferentialReference::getId).orElse(null), - dto.getValidation()); + dto.getValidation(), + dto.isBiodegradable(), + dto.isNonEntangling()); } } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateActivitySeineDataResultBuilder.java @@ -29,15 +29,16 @@ import fr.ird.observe.entities.referentiel.Ocean; import fr.ird.observe.entities.referentiel.Sex; import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.referentiel.Species2; -import fr.ird.observe.entities.seine.ActivitySeine; -import fr.ird.observe.entities.seine.ActivitySeines; -import fr.ird.observe.entities.seine.FloatingObject; import fr.ird.observe.entities.seine.NonTargetCatch; import fr.ird.observe.entities.seine.NonTargetLength; import fr.ird.observe.entities.seine.TargetLength; import fr.ird.observe.services.dto.constants.ReferentialLocale; -import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult; -import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.DcpModification; +import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectResult; +import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification; +import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult; +import fr.ird.observe.services.service.actions.consolidate.set.NonTargetCatchModification; +import fr.ird.observe.services.service.actions.consolidate.set.NonTargetLengthModification; +import fr.ird.observe.services.service.actions.consolidate.set.TargetLengthModification; import java.util.Date; import java.util.Locale; import java.util.Optional; @@ -45,9 +46,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import static fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.NonTargetCatchModification; -import static fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.NonTargetLengthModification; -import static fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult.TargetLengthModification; import static org.nuiton.i18n.I18n.l; /** @@ -63,96 +61,26 @@ public class ConsolidateActivitySeineDataResultBuilder { private static final Log log = LogFactory.getLog(ConsolidateActivitySeineDataResultBuilder.class); private final ReferentialLocale referenceLocale; protected final Locale locale; - protected final ActivitySeine activitySeine; private final ImmutableSet.Builder<String> lengthWeightParameterNotFoundBuilder = new ImmutableSet.Builder<>(); private final ImmutableSet.Builder<TargetLengthModification> targetLengthModificationBuilder = new ImmutableSet.Builder<>(); private final ImmutableSet.Builder<NonTargetLengthModification> nonTargetLengthModificationBuilder = new ImmutableSet.Builder<>(); private final ImmutableSet.Builder<NonTargetCatchModification> nonTargetCatchModificationBuilder = new ImmutableSet.Builder<>(); - private final ImmutableSet.Builder<DcpModification> dcpModificationBuilder = new ImmutableSet.Builder<>(); + private final ImmutableSet.Builder<FloatingObjectModification> dcpModificationBuilder = new ImmutableSet.Builder<>(); private SchoolType oldSchoolType; private SchoolType newSchoolType; + private final String activitySeineLabel; + private final String activitySeineId; - private ConsolidateActivitySeineDataResultBuilder(Locale locale, ReferentialLocale referenceLocale, ActivitySeine activitySeine) { + public ConsolidateActivitySeineDataResultBuilder(Locale locale, ReferentialLocale referenceLocale, String activitySeineId, String activitySeineLabel) { this.locale = locale; this.referenceLocale = referenceLocale; - this.activitySeine = activitySeine; + this.activitySeineId = activitySeineId; + this.activitySeineLabel = activitySeineLabel; } - public static ConsolidateActivitySeineDataResultBuilder create(Locale locale, ReferentialLocale referenceLocale, ActivitySeine activitySeine) { - return new ConsolidateActivitySeineDataResultBuilder(locale, referenceLocale, activitySeine); - } - - void flushDcpModification(FloatingObject dcp, String... propertyNamesModified) { - - String dcpLabel = activitySeine.getVesselActivitySeine().getLabel2() + "[" + activitySeine.getTime() + "]" + " - " + (dcp.getObjectOperation() == null ? "" : dcp.getObjectOperation().getLabel2()); - for (String modifiedProperty : propertyNamesModified) { - switch (modifiedProperty) { - case FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE: { - - DcpModification element = new DcpModification(); - element.setDcpId(dcp.getTopiaId()); - element.setDcpLabel(dcpLabel); - element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE); - element.setNewValue(dcp.getComputedWhenArrivingBiodegradable()); - dcpModificationBuilder.add(element); - - break; - } - case FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING: { - - DcpModification element = new DcpModification(); - element.setDcpId(dcp.getTopiaId()); - element.setDcpLabel(dcpLabel); - element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING); - element.setNewValue(dcp.getComputedWhenArrivingNonEntangling()); - dcpModificationBuilder.add(element); - - break; - } - case FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE: { - - DcpModification element = new DcpModification(); - element.setDcpId(dcp.getTopiaId()); - element.setDcpLabel(dcpLabel); - element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE); - element.setNewValue(dcp.getComputedWhenArrivingSimplifiedObjectType()); - dcpModificationBuilder.add(element); - break; - } - case FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE: { - - DcpModification element = new DcpModification(); - element.setDcpId(dcp.getTopiaId()); - element.setDcpLabel(dcpLabel); - element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE); - element.setNewValue(dcp.getComputedWhenLeavingBiodegradable()); - dcpModificationBuilder.add(element); - - break; - } - case FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING: { - - DcpModification element = new DcpModification(); - element.setDcpId(dcp.getTopiaId()); - element.setDcpLabel(dcpLabel); - element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING); - element.setNewValue(dcp.getComputedWhenLeavingNonEntangling()); - dcpModificationBuilder.add(element); + void flushDcpModification(ConsolidateFloatingObjectResult result) { - break; - } - case FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE: { - - DcpModification element = new DcpModification(); - element.setDcpId(dcp.getTopiaId()); - element.setDcpLabel(dcpLabel); - element.setPropertyName(FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE); - element.setNewValue(dcp.getComputedWhenLeavingSimplifiedObjectType()); - dcpModificationBuilder.add(element); - break; - } - } - } + dcpModificationBuilder.addAll(result.getFloatingObjectModifications()); } @@ -294,12 +222,12 @@ public class ConsolidateActivitySeineDataResultBuilder { ImmutableSet<TargetLengthModification> targetLengthModifications = targetLengthModificationBuilder.build(); ImmutableSet<NonTargetLengthModification> nonTargetLengthModifications = nonTargetLengthModificationBuilder.build(); ImmutableSet<NonTargetCatchModification> nonTargetCatchModifications = nonTargetCatchModificationBuilder.build(); - ImmutableSet<DcpModification> dcpModifications = dcpModificationBuilder.build(); + ImmutableSet<FloatingObjectModification> floatingObjectModifications = dcpModificationBuilder.build(); boolean noModification = (targetLengthModifications.isEmpty() && nonTargetLengthModifications.isEmpty() && nonTargetCatchModifications.isEmpty() - && dcpModifications.isEmpty() + && floatingObjectModifications.isEmpty() && newSchoolType == null); ConsolidateActivitySeineDataResult consolidateActivitySeineDataResult; @@ -310,8 +238,8 @@ public class ConsolidateActivitySeineDataResultBuilder { } else { consolidateActivitySeineDataResult = new ConsolidateActivitySeineDataResult(); - consolidateActivitySeineDataResult.setActivitySeineId(activitySeine.getTopiaId()); - consolidateActivitySeineDataResult.setActivitySeineLabel(ActivitySeines.decorate(referenceLocale.ordinal(), activitySeine)); + consolidateActivitySeineDataResult.setActivitySeineId(activitySeineId); + consolidateActivitySeineDataResult.setActivitySeineLabel(activitySeineLabel); if (newSchoolType != null) { consolidateActivitySeineDataResult.setSchoolTypeChanged(oldSchoolType, newSchoolType); @@ -319,7 +247,7 @@ public class ConsolidateActivitySeineDataResultBuilder { consolidateActivitySeineDataResult.setTargetLengthModifications(targetLengthModifications); consolidateActivitySeineDataResult.setNonTargetLengthModifications(nonTargetLengthModifications); consolidateActivitySeineDataResult.setNonTargetCatchModifications(nonTargetCatchModifications); - consolidateActivitySeineDataResult.setDcpModifications(dcpModifications); + consolidateActivitySeineDataResult.setFloatingObjectModifications(floatingObjectModifications); } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidateDataServiceTopia.java @@ -24,7 +24,6 @@ package fr.ird.observe.services.topia.service.actions.consolidate; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.common.constants.seine.DcpComputedValue; import fr.ird.observe.common.constants.seine.NonTargetCatchComputedValueSource; import fr.ird.observe.common.constants.seine.SchoolType; import fr.ird.observe.entities.LengthWeightComputable; @@ -34,8 +33,9 @@ import fr.ird.observe.entities.referentiel.LengthWeightParameter; import fr.ird.observe.entities.referentiel.Sex; import fr.ird.observe.entities.referentiel.SizeMeasureType; import fr.ird.observe.entities.referentiel.Species; -import fr.ird.observe.entities.referentiel.seine.SimplifiedObjectTypeNode; +import fr.ird.observe.entities.referentiel.seine.ObjectMaterial; import fr.ird.observe.entities.seine.ActivitySeine; +import fr.ird.observe.entities.seine.ActivitySeines; import fr.ird.observe.entities.seine.FloatingObject; import fr.ird.observe.entities.seine.FloatingObjectPart; import fr.ird.observe.entities.seine.NonTargetCatch; @@ -50,17 +50,29 @@ import fr.ird.observe.entities.seine.TargetSample; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.entities.seine.TripSeines; import fr.ird.observe.persistence.ObserveTopiaPersistenceContext; +import fr.ird.observe.services.binder.data.DataBinderSupport; import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import fr.ird.observe.services.dto.seine.FloatingObjectPartDto; import fr.ird.observe.services.dto.seine.TripSeineDto; -import fr.ird.observe.services.service.actions.consolidate.ConsolidateActivitySeineDataResult; import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService; import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataRequest; import fr.ird.observe.services.service.actions.consolidate.ConsolidateTripSeineDataResult; +import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectRequest; +import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectResult; +import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectConsolidateEngine; +import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeManager; +import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeNode; +import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult; import fr.ird.observe.services.topia.service.ObserveServiceTopia; import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.TreeMap; import java.util.stream.Collectors; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; @@ -85,6 +97,13 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements return consolidateTripSeineDataResult.orElse(null); } + @Override + public SimplifiedObjectTypeManager newSimplifiedObjectTypeManager() { + ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); + ImmutableMap<String, SimplifiedObjectTypeNode> materialMapping = create(persistenceContext.getObjectMaterialDao().findAll()); + return new SimplifiedObjectTypeManager(materialMapping); + } + private Optional<ConsolidateTripSeineDataResult> consolidateTripSeine(ReferentialLocale referenceLocale, String tripSeineId, boolean failIfLenghtWeightParameterNotFound) { TripSeine tripSeine = loadEntity(TripSeineDto.class, tripSeineId); @@ -112,24 +131,19 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements NonTargetCatch.PROPERTY_TOTAL_COUNT_COMPUTED_SOURCE ); - BeanMonitor dcpMonitor = new BeanMonitor( - FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE, - FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING, - FloatingObject.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE, - FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE, - FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING, - FloatingObject.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE - ); - Locale applicationLocale = serviceContext.getApplicationLocale(); ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); - ImmutableMap<String, SimplifiedObjectTypeNode> materialMapping = persistenceContext.getObjectMaterialDao().createMaterialMapping(); - SimplifiedObjectTypeManager simplifiedObjectTypeManager = new SimplifiedObjectTypeManager(materialMapping); + SimplifiedObjectTypeManager simplifiedObjectTypeManager = newSimplifiedObjectTypeManager(); + + FloatingObjectConsolidateEngine floatingObjectConsolidateEngine = new FloatingObjectConsolidateEngine(simplifiedObjectTypeManager); ImmutableSet.Builder<ConsolidateActivitySeineDataResult> activitiesResultBuilder = new ImmutableSet.Builder<>(); + DataBinderSupport<FloatingObject, FloatingObjectDto> floatingObjectBinder = getDataBinder(FloatingObjectDto.class); + DataBinderSupport<FloatingObjectPart, FloatingObjectPartDto> floatingObjectPartBinder = getDataBinder(FloatingObjectPartDto.class); + for (Route route : tripSeine.getRoute()) { for (ActivitySeine activitySeine : route.getActivitySeine()) { @@ -141,7 +155,8 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements continue; } - ConsolidateActivitySeineDataResultBuilder resultBuilder = ConsolidateActivitySeineDataResultBuilder.create(applicationLocale, referenceLocale, activitySeine); + + ConsolidateActivitySeineDataResultBuilder resultBuilder = new ConsolidateActivitySeineDataResultBuilder(applicationLocale, referenceLocale, activitySeine.getTopiaId(), ActivitySeines.decorate(referenceLocale.ordinal(), activitySeine)); ConsolidationActivitySeineDataContext activityContext = new ConsolidationActivitySeineDataContext(); activityContext.locale = applicationLocale; @@ -154,8 +169,9 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements activityContext.targetLengthMonitor = targetLengthMonitor; activityContext.nonTargetLengthMonitor = nonTargetSampleMonitor; activityContext.nonTargetCatchMonitor = nonTargetCatchMonitor; - activityContext.dcpMonitor = dcpMonitor; - activityContext.simplifiedObjectTypeManager = simplifiedObjectTypeManager; + activityContext.floatingObjectConsolidateEngine = floatingObjectConsolidateEngine; + activityContext.floatingObjectBinder = floatingObjectBinder; + activityContext.floatingObjectPartBinder = floatingObjectPartBinder; consolidateActivitySeine(activityContext); @@ -285,73 +301,20 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements } private void updateDcp(FloatingObject dcp, ConsolidationActivitySeineDataContext activityContext) { - activityContext.watchDcp(dcp); - - Set<FloatingObjectPart> whenArriving = dcp.getFloatingObjectPart().stream().filter(p -> p.getWhenArriving() != null).collect(Collectors.toSet()); - Set<FloatingObjectPart> whenLeaving = dcp.getFloatingObjectPart().stream().filter(p -> p.getWhenLeaving() != null).collect(Collectors.toSet()); - computeDcpBiodegradable(dcp, whenArriving, whenLeaving); - computeDcpNonEntangling(dcp, whenArriving, whenLeaving); - computeDcpSimplifiedObjectType(dcp, whenArriving, whenLeaving, activityContext.simplifiedObjectTypeManager); - activityContext.flushDcp(); + FloatingObjectConsolidateEngine floatingObjectConsolidateEngine = activityContext.floatingObjectConsolidateEngine; - } + ReferentialLocale referentialLocale = getReferentialLocale(); + DataBinderSupport<FloatingObjectPart, FloatingObjectPartDto> floatingObjectPartBinder = activityContext.floatingObjectPartBinder; - private void computeDcpSimplifiedObjectType(FloatingObject dcp, Set<FloatingObjectPart> whenArriving, Set<FloatingObjectPart> whenLeaving, SimplifiedObjectTypeManager simplifiedObjectTypeManager) { - String whenArrivingValue = computeDcpSimplifiedObjectType0(whenArriving, simplifiedObjectTypeManager); - dcp.setComputedWhenArrivingSimplifiedObjectType(whenArrivingValue); + FloatingObjectDto floatingObjectDto = activityContext.floatingObjectBinder.toData(referentialLocale, dcp); - String whenLeavingValue = computeDcpSimplifiedObjectType0(whenLeaving, simplifiedObjectTypeManager); - dcp.setComputedWhenLeavingSimplifiedObjectType(whenLeavingValue); - } + ImmutableSet<FloatingObjectPartDto> floatingObjectPartDtos = ImmutableSet.copyOf(dcp.getFloatingObjectPart().stream().map(p -> floatingObjectPartBinder.toData(referentialLocale, p)).collect(Collectors.toSet())); + ConsolidateFloatingObjectRequest request = new ConsolidateFloatingObjectRequest(floatingObjectDto, floatingObjectPartDtos); + Optional<ConsolidateFloatingObjectResult> result = floatingObjectConsolidateEngine.consolidate(request); - private void computeDcpNonEntangling(FloatingObject dcp, Set<FloatingObjectPart> whenArriving, Set<FloatingObjectPart> whenLeaving) { - DcpComputedValue whenArrivingValue = computeDcpNonEntangling0(whenArriving); - dcp.setComputedWhenArrivingNonEntangling(whenArrivingValue); + result.ifPresent(r->activityContext.flushDcp(dcp, r)); - DcpComputedValue whenLeavingValue = computeDcpNonEntangling0(whenLeaving); - dcp.setComputedWhenLeavingNonEntangling(whenLeavingValue); - } - - private void computeDcpBiodegradable(FloatingObject dcp, Set<FloatingObjectPart> whenArriving, Set<FloatingObjectPart> whenLeaving) { - DcpComputedValue whenArrivingValue = computeDcpBiodegradable0(whenArriving); - dcp.setComputedWhenArrivingBiodegradable(whenArrivingValue); - - DcpComputedValue whenLeavingValue = computeDcpBiodegradable0(whenLeaving); - dcp.setComputedWhenLeavingBiodegradable(whenLeavingValue); - } - - private DcpComputedValue computeDcpBiodegradable0(Set<FloatingObjectPart> floatingObjectParts) { - DcpComputedValue result = DcpComputedValue.UNKNOWN; - if (!floatingObjectParts.isEmpty()) { - result = DcpComputedValue.TRUE; - for (FloatingObjectPart floatingObjectPart : floatingObjectParts) { - if (!floatingObjectPart.getObjectMaterial().isBiodegradable()) { - result = DcpComputedValue.FALSE; - break; - } - } - } - return result; - } - - private String computeDcpSimplifiedObjectType0(Set<FloatingObjectPart> floatingObjectParts, SimplifiedObjectTypeManager simplifiedObjectTypeManager) { - Set<String> objectMaterialIds = floatingObjectParts.stream().map(p -> p.getObjectMaterial().getTopiaId()).collect(Collectors.toSet()); - return simplifiedObjectTypeManager.getStandardCode(objectMaterialIds); - } - - private DcpComputedValue computeDcpNonEntangling0(Set<FloatingObjectPart> floatingObjectParts) { - DcpComputedValue result = DcpComputedValue.UNKNOWN; - if (!floatingObjectParts.isEmpty()) { - result = DcpComputedValue.TRUE; - for (FloatingObjectPart floatingObjectPart : floatingObjectParts) { - if (!floatingObjectPart.getObjectMaterial().isNonEntangling()) { - result = DcpComputedValue.FALSE; - break; - } - } - } - return result; } private void updateNonTargetCatch(ConsolidationActivitySeineDataContext activityContext, NonTargetCatch nonTargetCatch) { @@ -734,4 +697,54 @@ public class ConsolidateDataServiceTopia extends ObserveServiceTopia implements } } + static ImmutableMap<String, SimplifiedObjectTypeNode> create(List<ObjectMaterial> materials) { + TreeMap<String, SimplifiedObjectTypeNode> mappingBuilder = new TreeMap<>(); + + Set<ObjectMaterial> materialsDone = new LinkedHashSet<>(); + Set<ObjectMaterial> materialsTodo = new LinkedHashSet<>(materials); + + while (!materialsTodo.isEmpty()) { + + Set<ObjectMaterial> currentRoundMaterials; + if (materialsDone.isEmpty()) { + + // first round + currentRoundMaterials = materialsTodo.stream().filter(f -> f.getParent() == null).collect(Collectors.toSet()); + + } else { + currentRoundMaterials = materialsTodo.stream().filter(f -> materialsDone.contains(f.getParent())).collect(Collectors.toSet()); + } + + materialsDone.addAll(currentRoundMaterials); + materialsTodo.removeAll(currentRoundMaterials); + + for (ObjectMaterial currentRoundMaterial : currentRoundMaterials) { + + ObjectMaterial simplifiedObjectMaterial = currentRoundMaterial.getSimplifiedObjectMaterial(); + + SimplifiedObjectTypeNode node; + if (Objects.equals(currentRoundMaterial, simplifiedObjectMaterial)) { + + // new node + ObjectMaterial simplifiedParentObjectMaterial = currentRoundMaterial.getSimplifiedParentObjectMaterial(); + SimplifiedObjectTypeNode parentNode = simplifiedParentObjectMaterial == null ? null : mappingBuilder.get(simplifiedParentObjectMaterial.getTopiaId()); + node = new SimplifiedObjectTypeNode(currentRoundMaterial.getTopiaId(), currentRoundMaterial.getStandardCode(), parentNode); + + } else { + + // simplified object material is a parent, so must have been process in previous round + Objects.requireNonNull(simplifiedObjectMaterial); + + node = mappingBuilder.get(simplifiedObjectMaterial.getTopiaId()); + Objects.requireNonNull(node); + + } + + mappingBuilder.put(currentRoundMaterial.getTopiaId(), node); + + } + } + return ImmutableMap.copyOf(mappingBuilder); + } + } ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/ConsolidationActivitySeineDataContext.java @@ -22,6 +22,7 @@ package fr.ird.observe.services.topia.service.actions.consolidate; * #L% */ +import fr.ird.observe.common.constants.seine.DcpComputedValue; import fr.ird.observe.common.constants.seine.SchoolType; import fr.ird.observe.entities.referentiel.LengthWeightParameter; import fr.ird.observe.entities.referentiel.LengthWeightParameterNotFoundException; @@ -32,6 +33,7 @@ import fr.ird.observe.entities.referentiel.SizeMeasureType; import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.seine.ActivitySeine; import fr.ird.observe.entities.seine.FloatingObject; +import fr.ird.observe.entities.seine.FloatingObjectPart; import fr.ird.observe.entities.seine.NonTargetCatch; import fr.ird.observe.entities.seine.NonTargetLength; import fr.ird.observe.entities.seine.Route; @@ -39,6 +41,12 @@ import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.entities.seine.TargetLength; import fr.ird.observe.entities.seine.TripSeine; import fr.ird.observe.persistence.ObserveTopiaDaoSupplier; +import fr.ird.observe.services.binder.data.DataBinderSupport; +import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import fr.ird.observe.services.dto.seine.FloatingObjectPartDto; +import fr.ird.observe.services.service.actions.consolidate.dcp.ConsolidateFloatingObjectResult; +import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectConsolidateEngine; +import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification; import java.util.Date; import java.util.Locale; import org.nuiton.util.beans.BeanMonitor; @@ -68,11 +76,11 @@ class ConsolidationActivitySeineDataContext { BeanMonitor nonTargetCatchMonitor; - BeanMonitor dcpMonitor; - ConsolidateActivitySeineDataResultBuilder resultBuilder; - SimplifiedObjectTypeManager simplifiedObjectTypeManager; + FloatingObjectConsolidateEngine floatingObjectConsolidateEngine; + DataBinderSupport<FloatingObject, FloatingObjectDto> floatingObjectBinder; + DataBinderSupport<FloatingObjectPart, FloatingObjectPartDto> floatingObjectPartBinder; public Ocean getOcean() { return tripSeine.getOcean(); @@ -134,16 +142,43 @@ class ConsolidationActivitySeineDataContext { } } - void watchDcp(FloatingObject dcp) { - dcpMonitor.setBean(dcp); - } - - void flushDcp() { - if (dcpMonitor.wasModified()) { - FloatingObject dcp = (FloatingObject) dcpMonitor.getBean(); - resultBuilder.flushDcpModification(dcp, dcpMonitor.getModifiedProperties()); + void flushDcp(FloatingObject dcp, ConsolidateFloatingObjectResult consolidateFloatingObjectResult) { + resultBuilder.flushDcpModification(consolidateFloatingObjectResult); + for (FloatingObjectModification floatingObjectModification : consolidateFloatingObjectResult.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; + } + } } - dcpMonitor.setBean(null); } void flushTargetLength() { ===================================== services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManagerTest.java → services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/dcp/SimplifiedObjectTypeManagerTest.java ===================================== --- a/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManagerTest.java +++ b/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/consolidate/dcp/SimplifiedObjectTypeManagerTest.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.topia.service.actions.consolidate; +package fr.ird.observe.services.topia.service.actions.consolidate.dcp; /*- * #%L @@ -22,10 +22,10 @@ package fr.ird.observe.services.topia.service.actions.consolidate; * #L% */ -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.entities.referentiel.seine.SimplifiedObjectTypeNode; -import fr.ird.observe.persistence.ObserveTopiaPersistenceContext; +import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService; +import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeManager; +import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeNode; import fr.ird.observe.services.topia.service.AbstractServiceTopiaTest; import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.spi.DatabaseNameConfiguration; @@ -46,12 +46,8 @@ public class SimplifiedObjectTypeManagerTest extends AbstractServiceTopiaTest { @Before public void setUp() throws Exception { - try (ObserveTopiaPersistenceContext persistenceContext = topiaTestMethodResource.newPersistenceContext()) { - - ImmutableMap<String, SimplifiedObjectTypeNode> materialMapping = persistenceContext.getObjectMaterialDao().createMaterialMapping(); - simplifiedObjectTypeManager = new SimplifiedObjectTypeManager(materialMapping); - } + simplifiedObjectTypeManager = topiaTestMethodResource.newService(ConsolidateDataService.class).newSimplifiedObjectTypeManager(); } ===================================== services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java +++ b/services/src/main/java/fr/ird/observe/services/ObserveDtoInitializer.java @@ -693,7 +693,9 @@ public class ObserveDtoInitializer { flushReferential(referentialDefaultDefinitionBuilder(ObjectMaterialDto.class) .addProperty(String.class, ObjectMaterialDto.PROPERTY_PARENT) .addProperty(String.class, ObjectMaterialDto.PROPERTY_OBJECT_MATERIAL_TYPE) - .addProperty(String.class, ObjectMaterialDto.PROPERTY_VALIDATION)); + .addProperty(String.class, ObjectMaterialDto.PROPERTY_VALIDATION) + .addProperty(boolean.class, ObjectMaterialDto.PROPERTY_BIODEGRADABLE) + .addProperty(boolean.class, ObjectMaterialDto.PROPERTY_NON_ENTANGLING)); } @Override ===================================== services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java +++ b/services/src/main/java/fr/ird/observe/services/dto/reference/AbstractReference.java @@ -155,6 +155,10 @@ public abstract class AbstractReference<D extends IdDto> implements ObserveDto, return labelPropertyValues[propertyIndex]; } + public Boolean getBooleanPropertyValue(String propertyName) { + return (Boolean) getPropertyValue(propertyName); + } + public Serializable[] getLabelPropertyValues() { return labelPropertyValues; } ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateDataService.java @@ -23,7 +23,9 @@ package fr.ird.observe.services.service.actions.consolidate; */ import fr.ird.observe.services.service.ObserveService; +import fr.ird.observe.services.service.actions.consolidate.dcp.SimplifiedObjectTypeManager; import fr.ird.observe.services.spi.ReadDataPermission; +import fr.ird.observe.services.spi.ReadReferentialPermission; import fr.ird.observe.services.spi.Write; import fr.ird.observe.services.spi.WriteDataPermission; import io.ultreia.java4all.http.spi.Post; @@ -38,6 +40,9 @@ import io.ultreia.java4all.http.spi.Post; */ public interface ConsolidateDataService extends ObserveService { + @ReadReferentialPermission + SimplifiedObjectTypeManager newSimplifiedObjectTypeManager(); + /** * Effectue la consolitation à partir de la demande passé en paramètre et retourne les résultats pour les marées * modifiées. ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateTripSeineDataResult.java @@ -24,6 +24,7 @@ package fr.ird.observe.services.service.actions.consolidate; import com.google.common.collect.ImmutableSet; import fr.ird.observe.services.dto.ObserveDto; +import fr.ird.observe.services.service.actions.consolidate.set.ConsolidateActivitySeineDataResult; import java.io.Serializable; /** ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectRequest.java @@ -0,0 +1,38 @@ +package fr.ird.observe.services.service.actions.consolidate.dcp; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.ObserveDto; +import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import fr.ird.observe.services.dto.seine.FloatingObjectPartDto; +import java.util.stream.Collectors; + +/** + * Created by tchemit on 04/08/17. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class ConsolidateFloatingObjectRequest implements ObserveDto { + + private final FloatingObjectDto dcp; + private final ImmutableSet<FloatingObjectPartDto> whenArriving; + private final ImmutableSet<FloatingObjectPartDto> whenLeaving; + + + public ConsolidateFloatingObjectRequest(FloatingObjectDto dcp, ImmutableSet<FloatingObjectPartDto> floatingObjectParts) { + this.dcp = dcp; + whenArriving = ImmutableSet.copyOf(floatingObjectParts.stream().filter(p -> p.getWhenArriving() != null).collect(Collectors.toSet())); + whenLeaving = ImmutableSet.copyOf(floatingObjectParts.stream().filter(p -> p.getWhenLeaving() != null).collect(Collectors.toSet())); + } + + public FloatingObjectDto getDcp() { + return dcp; + } + + public ImmutableSet<FloatingObjectPartDto> getWhenArriving() { + return whenArriving; + } + + public ImmutableSet<FloatingObjectPartDto> getWhenLeaving() { + return whenLeaving; + } +} ===================================== persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/ObjectMaterialTopiaDao.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResult.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/ObjectMaterialTopiaDao.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResult.java @@ -1,8 +1,8 @@ -package fr.ird.observe.entities.referentiel.seine; +package fr.ird.observe.services.service.actions.consolidate.dcp; -/*- +/* * #%L - * ObServe :: Persistence + * ObServe :: Services * %% * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io * %% @@ -22,10 +22,34 @@ package fr.ird.observe.entities.referentiel.seine; * #L% */ -import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.ObserveDto; +import java.io.Serializable; -public class ObjectMaterialTopiaDao extends AbstractObjectMaterialTopiaDao<ObjectMaterial> { - public ImmutableMap<String, SimplifiedObjectTypeNode> createMaterialMapping() { - return SimplifiedObjectTypeNode.create(findAll()); +/** + * Pour retourner le résultat de la consolidation d'une activité de type Seine. + * <p> + * Un tel objet est créé uniquement si des modifications on été effectuée sur l'activité. + * <p> + * Created on 28/08/15. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class ConsolidateFloatingObjectResult implements Serializable, ObserveDto { + + private static final long serialVersionUID = 1L; + + /** + * L'ensemble des modifications sur les objets flottants. + */ + private final ImmutableSet<FloatingObjectModification> floatingObjectModifications; + + ConsolidateFloatingObjectResult(ImmutableSet<FloatingObjectModification> floatingObjectModifications) { + this.floatingObjectModifications = floatingObjectModifications; } + + public ImmutableSet<FloatingObjectModification> getFloatingObjectModifications() { + return floatingObjectModifications; + } + } ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/ConsolidateFloatingObjectResultBuilder.java @@ -0,0 +1,94 @@ +package fr.ird.observe.services.service.actions.consolidate.dcp; + +/* + * #%L + * ObServe :: Services ToPIA Implementation + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, 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 com.google.common.collect.ImmutableSet; +import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import java.util.Optional; + +/** + * @author Tony Chemit - dev@tchemit.fr + * @since 7.0 + */ +public class ConsolidateFloatingObjectResultBuilder { + + private final ImmutableSet.Builder<FloatingObjectModification> modificationsBuilder = new ImmutableSet.Builder<>(); + + public Optional<ConsolidateFloatingObjectResult> build() { + + ImmutableSet<FloatingObjectModification> modifications = modificationsBuilder.build(); + + boolean noModification = modifications.isEmpty(); + + return Optional.ofNullable(noModification ? null : new ConsolidateFloatingObjectResult(modifications)); + + } + + void flushDcpModification(FloatingObjectDto dcp, String... propertyNamesModified) { + + for (String modifiedProperty : propertyNamesModified) { + switch (modifiedProperty) { + case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE: { + + FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingBiodegradable()); + modificationsBuilder.add(element); + + break; + } + case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING: { + + FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingNonEntangling()); + modificationsBuilder.add(element); + + break; + } + case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE: { + + FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingSimplifiedObjectType()); + modificationsBuilder.add(element); + break; + } + case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE: { + + FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), modifiedProperty, dcp.getComputedWhenArrivingBiodegradable()); + modificationsBuilder.add(element); + break; + } + case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING: { + + FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING, dcp.getComputedWhenLeavingNonEntangling()); + modificationsBuilder.add(element); + + break; + } + case FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE: { + + FloatingObjectModification element = new FloatingObjectModification(dcp.getId(), FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE, dcp.getComputedWhenLeavingSimplifiedObjectType()); + modificationsBuilder.add(element); + break; + } + } + } + + } +} ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectConsolidateEngine.java @@ -0,0 +1,136 @@ +package fr.ird.observe.services.service.actions.consolidate.dcp; + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.common.constants.seine.DcpComputedValue; +import fr.ird.observe.services.dto.referential.seine.ObjectMaterialDto; +import fr.ird.observe.services.dto.seine.FloatingObjectDto; +import fr.ird.observe.services.dto.seine.FloatingObjectPartDto; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import org.nuiton.util.beans.BeanMonitor; + +/** + * Created by tchemit on 04/08/17. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class FloatingObjectConsolidateEngine { + + private final SimplifiedObjectTypeManager simplifiedObjectTypeManager; + + private static class FloatingObjectConsolidateContext { + + final ConsolidateFloatingObjectResultBuilder resultBuilder; + final BeanMonitor dcpMonitor; + + FloatingObjectConsolidateContext(ConsolidateFloatingObjectResultBuilder resultBuilder) { + this.resultBuilder = resultBuilder; + dcpMonitor = new BeanMonitor( + FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_BIODEGRADABLE, + FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_NON_ENTANGLING, + FloatingObjectDto.PROPERTY_COMPUTED_WHEN_ARRIVING_SIMPLIFIED_OBJECT_TYPE, + FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_BIODEGRADABLE, + FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_NON_ENTANGLING, + FloatingObjectDto.PROPERTY_COMPUTED_WHEN_LEAVING_SIMPLIFIED_OBJECT_TYPE + ); + } + + + void watchDcp(FloatingObjectDto dcp) { + dcpMonitor.setBean(dcp); + } + + void flushDcp() { + if (dcpMonitor.wasModified()) { + FloatingObjectDto dcp = (FloatingObjectDto) dcpMonitor.getBean(); + resultBuilder.flushDcpModification(dcp, dcpMonitor.getModifiedProperties()); + } + dcpMonitor.setBean(null); + } + } + + public FloatingObjectConsolidateEngine(SimplifiedObjectTypeManager simplifiedObjectTypeManager) { + this.simplifiedObjectTypeManager = simplifiedObjectTypeManager; + } + + public Optional<ConsolidateFloatingObjectResult> consolidate(ConsolidateFloatingObjectRequest request) { + + ConsolidateFloatingObjectResultBuilder builder = new ConsolidateFloatingObjectResultBuilder(); + FloatingObjectConsolidateContext context = new FloatingObjectConsolidateContext(builder); + + FloatingObjectDto dcp = request.getDcp(); + + context.watchDcp(dcp); + + ImmutableSet<FloatingObjectPartDto> whenArriving = request.getWhenArriving(); + ImmutableSet<FloatingObjectPartDto> whenLeaving = request.getWhenLeaving(); + + computeDcpSimplifiedObjectType(dcp, whenArriving, whenLeaving); + computeDcpNonEntangling(dcp, whenArriving, whenLeaving); + computeDcpBiodegradable(dcp, whenArriving, whenLeaving); + + context.flushDcp(); + + return builder.build(); + + } + + private void computeDcpSimplifiedObjectType(FloatingObjectDto dcp, Set<FloatingObjectPartDto> whenArriving, Set<FloatingObjectPartDto> whenLeaving) { + String whenArrivingValue = computeDcpSimplifiedObjectType0(whenArriving); + dcp.setComputedWhenArrivingSimplifiedObjectType(whenArrivingValue); + + String whenLeavingValue = computeDcpSimplifiedObjectType0(whenLeaving); + dcp.setComputedWhenLeavingSimplifiedObjectType(whenLeavingValue); + } + + private void computeDcpNonEntangling(FloatingObjectDto dcp, Set<FloatingObjectPartDto> whenArriving, Set<FloatingObjectPartDto> whenLeaving) { + DcpComputedValue whenArrivingValue = computeDcpNonEntangling0(whenArriving); + dcp.setComputedWhenArrivingNonEntangling(whenArrivingValue); + + DcpComputedValue whenLeavingValue = computeDcpNonEntangling0(whenLeaving); + dcp.setComputedWhenLeavingNonEntangling(whenLeavingValue); + } + + private void computeDcpBiodegradable(FloatingObjectDto dcp, Set<FloatingObjectPartDto> whenArriving, Set<FloatingObjectPartDto> whenLeaving) { + DcpComputedValue whenArrivingValue = computeDcpBiodegradable0(whenArriving); + dcp.setComputedWhenArrivingBiodegradable(whenArrivingValue); + + DcpComputedValue whenLeavingValue = computeDcpBiodegradable0(whenLeaving); + dcp.setComputedWhenLeavingBiodegradable(whenLeavingValue); + } + + private DcpComputedValue computeDcpBiodegradable0(Set<FloatingObjectPartDto> FloatingObjectPartDtos) { + DcpComputedValue result = DcpComputedValue.UNKNOWN; + if (!FloatingObjectPartDtos.isEmpty()) { + result = DcpComputedValue.TRUE; + for (FloatingObjectPartDto FloatingObjectPartDto : FloatingObjectPartDtos) { + if (!FloatingObjectPartDto.getObjectMaterial().getBooleanPropertyValue(ObjectMaterialDto.PROPERTY_BIODEGRADABLE)) { + result = DcpComputedValue.FALSE; + break; + } + } + } + return result; + } + + private String computeDcpSimplifiedObjectType0(Set<FloatingObjectPartDto> FloatingObjectPartDtos) { + Set<String> objectMaterialIds = FloatingObjectPartDtos.stream().map(p -> p.getObjectMaterial().getId()).collect(Collectors.toSet()); + return simplifiedObjectTypeManager.getStandardCode(objectMaterialIds); + } + + private DcpComputedValue computeDcpNonEntangling0(Set<FloatingObjectPartDto> FloatingObjectPartDtos) { + DcpComputedValue result = DcpComputedValue.UNKNOWN; + if (!FloatingObjectPartDtos.isEmpty()) { + result = DcpComputedValue.TRUE; + for (FloatingObjectPartDto FloatingObjectPartDto : FloatingObjectPartDtos) { + if (!FloatingObjectPartDto.getObjectMaterial().getBooleanPropertyValue(ObjectMaterialDto.PROPERTY_NON_ENTANGLING)) { + result = DcpComputedValue.FALSE; + break; + } + } + } + return result; + } + +} ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/FloatingObjectModification.java @@ -0,0 +1,38 @@ +package fr.ird.observe.services.service.actions.consolidate.dcp; + +import java.io.Serializable; + +/** + * Created by tchemit on 04/08/17. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class FloatingObjectModification implements Serializable { + + private static final long serialVersionUID = 1L; + + private final String dcpId; + + private final String propertyName; + + private final Serializable newValue; + + public FloatingObjectModification(String dcpId, String propertyName, Serializable newValue) { + this.dcpId = dcpId; + this.propertyName = propertyName; + this.newValue = newValue; + } + + public String getDcpId() { + return dcpId; + } + + public String getPropertyName() { + return propertyName; + } + + public Serializable getNewValue() { + return newValue; + } + +} ===================================== services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManager.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java ===================================== --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/consolidate/SimplifiedObjectTypeManager.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeManager.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.topia.service.actions.consolidate; +package fr.ird.observe.services.service.actions.consolidate.dcp; /*- * #%L @@ -23,7 +23,7 @@ package fr.ird.observe.services.topia.service.actions.consolidate; */ import com.google.common.collect.ImmutableMap; -import fr.ird.observe.entities.referentiel.seine.SimplifiedObjectTypeNode; +import fr.ird.observe.services.dto.ObserveDto; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; @@ -37,21 +37,20 @@ import java.util.Set; * @author Tony Chemit - dev@tchemit.fr * @since 7.0 */ -class SimplifiedObjectTypeManager { - +public class SimplifiedObjectTypeManager implements ObserveDto { // For each object material, get his simplified object type node private final ImmutableMap<String, SimplifiedObjectTypeNode> mapping; - SimplifiedObjectTypeManager(ImmutableMap<String, SimplifiedObjectTypeNode> mapping) { + public SimplifiedObjectTypeManager(ImmutableMap<String, SimplifiedObjectTypeNode> mapping) { this.mapping = mapping; } - SimplifiedObjectTypeNode getNodeForStandardCode(String standardCode) { + public SimplifiedObjectTypeNode getNodeForStandardCode(String standardCode) { return mapping.values().stream().filter(n -> n.getStandardCode().equals(standardCode)).findFirst().orElseThrow(IllegalArgumentException::new); } - String getStandardCode(Set<String> objectMaterialIds) { + public String getStandardCode(Set<String> objectMaterialIds) { List<SimplifiedObjectTypeNode> availableNodes = new LinkedList<>(); for (String objectMaterialId : objectMaterialIds) { availableNodes.add(mapping.get(objectMaterialId)); ===================================== persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/SimplifiedObjectTypeNode.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/entities/referentiel/seine/SimplifiedObjectTypeNode.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/dcp/SimplifiedObjectTypeNode.java @@ -1,4 +1,4 @@ -package fr.ird.observe.entities.referentiel.seine; +package fr.ird.observe.services.service.actions.consolidate.dcp; /*- * #%L @@ -23,14 +23,9 @@ package fr.ird.observe.entities.referentiel.seine; */ import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Objects; -import java.util.Set; -import java.util.TreeMap; -import java.util.stream.Collectors; /** * Created by tchemit on 02/08/17. @@ -39,64 +34,14 @@ import java.util.stream.Collectors; */ public class SimplifiedObjectTypeNode { - static ImmutableMap<String, SimplifiedObjectTypeNode> create(List<ObjectMaterial> materials) { - TreeMap<String, SimplifiedObjectTypeNode> mappingBuilder = new TreeMap<>(); - - Set<ObjectMaterial> materialsDone = new LinkedHashSet<>(); - Set<ObjectMaterial> materialsTodo = new LinkedHashSet<>(materials); - - while (!materialsTodo.isEmpty()) { - - Set<ObjectMaterial> currentRoundMaterials; - if (materialsDone.isEmpty()) { - - // first round - currentRoundMaterials = materialsTodo.stream().filter(f -> f.getParent() == null).collect(Collectors.toSet()); - - } else { - currentRoundMaterials = materialsTodo.stream().filter(f -> materialsDone.contains(f.getParent())).collect(Collectors.toSet()); - } - - materialsDone.addAll(currentRoundMaterials); - materialsTodo.removeAll(currentRoundMaterials); - - for (ObjectMaterial currentRoundMaterial : currentRoundMaterials) { - - ObjectMaterial simplifiedObjectMaterial = currentRoundMaterial.getSimplifiedObjectMaterial(); - - SimplifiedObjectTypeNode node; - if (Objects.equals(currentRoundMaterial, simplifiedObjectMaterial)) { - - // new node - ObjectMaterial simplifiedParentObjectMaterial = currentRoundMaterial.getSimplifiedParentObjectMaterial(); - SimplifiedObjectTypeNode parentNode = simplifiedParentObjectMaterial == null ? null : mappingBuilder.get(simplifiedParentObjectMaterial.getTopiaId()); - node = new SimplifiedObjectTypeNode(currentRoundMaterial, parentNode); - - } else { - - // simplified object material is a parent, so must have been process in previous round - Objects.requireNonNull(simplifiedObjectMaterial); - - node = mappingBuilder.get(simplifiedObjectMaterial.getTopiaId()); - Objects.requireNonNull(node); - - } - - mappingBuilder.put(currentRoundMaterial.getTopiaId(), node); - - } - } - return ImmutableMap.copyOf(mappingBuilder); - } - private final int level; private final String id; private final String standardCode; private final SimplifiedObjectTypeNode parent; - private SimplifiedObjectTypeNode(ObjectMaterial material, SimplifiedObjectTypeNode parent) { - this.id = material.getTopiaId(); - this.standardCode = material.getStandardCode(); + public SimplifiedObjectTypeNode(String id, String standardCode, SimplifiedObjectTypeNode parent) { + this.id = id; + this.standardCode = standardCode; this.parent = parent; this.level = (parent == null ? 0 : 1 + parent.getLevel()); } ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java → services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/ConsolidateActivitySeineDataResult.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/ConsolidateActivitySeineDataResult.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/ConsolidateActivitySeineDataResult.java @@ -1,4 +1,4 @@ -package fr.ird.observe.services.service.actions.consolidate; +package fr.ird.observe.services.service.actions.consolidate.set; /* * #%L @@ -25,6 +25,7 @@ package fr.ird.observe.services.service.actions.consolidate; import com.google.common.collect.ImmutableSet; import fr.ird.observe.common.constants.seine.SchoolType; import fr.ird.observe.services.dto.ObserveDto; +import fr.ird.observe.services.service.actions.consolidate.dcp.FloatingObjectModification; import java.io.Serializable; /** @@ -77,7 +78,7 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe /** * L'ensemble des modifications sur les objets flottants. */ - private ImmutableSet<DcpModification> dcpModifications; + private ImmutableSet<FloatingObjectModification> floatingObjectModifications; private SchoolType oldSchoolType; private SchoolType newSchoolType; @@ -101,8 +102,8 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe return nonTargetCatchModifications; } - public ImmutableSet<DcpModification> getDcpModifications() { - return dcpModifications; + public ImmutableSet<FloatingObjectModification> getFloatingObjectModifications() { + return floatingObjectModifications; } public SchoolType getOldSchoolType() { @@ -113,186 +114,6 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe return newSchoolType; } - public static class TargetLengthModification implements Serializable { - - private static final long serialVersionUID = 1L; - - String targetLengthId; - - protected String speciesLabel; - - protected String propertyName; - - protected Float newValue; - - public String getTargetLengthId() { - return targetLengthId; - } - - public String getSpeciesLabel() { - return speciesLabel; - } - - public String getPropertyName() { - return propertyName; - } - - public Float getNewValue() { - return newValue; - } - - public void setTargetLengthId(String targetLengthId) { - this.targetLengthId = targetLengthId; - } - - public void setSpeciesLabel(String speciesLabel) { - this.speciesLabel = speciesLabel; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public void setNewValue(Float newValue) { - this.newValue = newValue; - } - } - - public static class NonTargetLengthModification implements Serializable { - - private static final long serialVersionUID = 1L; - - String nonTargetLengthId; - - protected String speciesLabel; - - protected String propertyName; - - protected Float newValue; - - public String getNonTargetLengthId() { - return nonTargetLengthId; - } - - public String getSpeciesLabel() { - return speciesLabel; - } - - public String getPropertyName() { - return propertyName; - } - - public Float getNewValue() { - return newValue; - } - - public void setNonTargetLengthId(String nonTargetLengthId) { - this.nonTargetLengthId = nonTargetLengthId; - } - - public void setSpeciesLabel(String speciesLabel) { - this.speciesLabel = speciesLabel; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public void setNewValue(Float newValue) { - this.newValue = newValue; - } - } - - public static class NonTargetCatchModification implements Serializable { - - private static final long serialVersionUID = 1L; - - String nonTargetCatchId; - - protected String speciesLabel; - - protected String propertyName; - - protected Number newValue; - - public String getNonTargetCatchId() { - return nonTargetCatchId; - } - - public String getSpeciesLabel() { - return speciesLabel; - } - - public String getPropertyName() { - return propertyName; - } - - public Number getNewValue() { - return newValue; - } - - public void setNonTargetCatchId(String nonTargetCatchId) { - this.nonTargetCatchId = nonTargetCatchId; - } - - public void setSpeciesLabel(String speciesLabel) { - this.speciesLabel = speciesLabel; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public void setNewValue(Number newValue) { - this.newValue = newValue; - } - } - - public static class DcpModification implements Serializable { - - private static final long serialVersionUID = 1L; - - String dcpId; - - protected String dcpLabel; - - protected String propertyName; - - protected Serializable newValue; - - public String getDcpId() { - return dcpId; - } - - public String getDcpLabel() { - return dcpLabel; - } - - public String getPropertyName() { - return propertyName; - } - - public Serializable getNewValue() { - return newValue; - } - - public void setDcpId(String dcpId) { - this.dcpId = dcpId; - } - - public void setDcpLabel(String dcpLabel) { - this.dcpLabel = dcpLabel; - } - - public void setPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public void setNewValue(Serializable newValue) { - this.newValue = newValue; - } - } - public void setActivitySeineId(String activitySeineId) { this.activitySeineId = activitySeineId; } @@ -318,7 +139,7 @@ public class ConsolidateActivitySeineDataResult implements Serializable, Observe this.nonTargetCatchModifications = nonTargetCatchModifications; } - public void setDcpModifications(ImmutableSet<DcpModification> dcpModifications) { - this.dcpModifications = dcpModifications; + public void setFloatingObjectModifications(ImmutableSet<FloatingObjectModification> floatingObjectModifications) { + this.floatingObjectModifications = floatingObjectModifications; } } ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetCatchModification.java @@ -0,0 +1,53 @@ +package fr.ird.observe.services.service.actions.consolidate.set; + +import java.io.Serializable; + +/** + * Created by tchemit on 04/08/17. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class NonTargetCatchModification implements Serializable { + + private static final long serialVersionUID = 1L; + + String nonTargetCatchId; + + protected String speciesLabel; + + protected String propertyName; + + protected Number newValue; + + public String getNonTargetCatchId() { + return nonTargetCatchId; + } + + public String getSpeciesLabel() { + return speciesLabel; + } + + public String getPropertyName() { + return propertyName; + } + + public Number getNewValue() { + return newValue; + } + + public void setNonTargetCatchId(String nonTargetCatchId) { + this.nonTargetCatchId = nonTargetCatchId; + } + + public void setSpeciesLabel(String speciesLabel) { + this.speciesLabel = speciesLabel; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public void setNewValue(Number newValue) { + this.newValue = newValue; + } +} ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/NonTargetLengthModification.java @@ -0,0 +1,53 @@ +package fr.ird.observe.services.service.actions.consolidate.set; + +import java.io.Serializable; + +/** + * Created by tchemit on 04/08/17. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class NonTargetLengthModification implements Serializable { + + private static final long serialVersionUID = 1L; + + String nonTargetLengthId; + + protected String speciesLabel; + + protected String propertyName; + + protected Float newValue; + + public String getNonTargetLengthId() { + return nonTargetLengthId; + } + + public String getSpeciesLabel() { + return speciesLabel; + } + + public String getPropertyName() { + return propertyName; + } + + public Float getNewValue() { + return newValue; + } + + public void setNonTargetLengthId(String nonTargetLengthId) { + this.nonTargetLengthId = nonTargetLengthId; + } + + public void setSpeciesLabel(String speciesLabel) { + this.speciesLabel = speciesLabel; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public void setNewValue(Float newValue) { + this.newValue = newValue; + } +} ===================================== services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java ===================================== --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/actions/consolidate/set/TargetLengthModification.java @@ -0,0 +1,53 @@ +package fr.ird.observe.services.service.actions.consolidate.set; + +import java.io.Serializable; + +/** + * Created by tchemit on 04/08/17. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class TargetLengthModification implements Serializable { + + private static final long serialVersionUID = 1L; + + private String targetLengthId; + + protected String speciesLabel; + + protected String propertyName; + + protected Float newValue; + + public String getTargetLengthId() { + return targetLengthId; + } + + public String getSpeciesLabel() { + return speciesLabel; + } + + public String getPropertyName() { + return propertyName; + } + + public Float getNewValue() { + return newValue; + } + + public void setTargetLengthId(String targetLengthId) { + this.targetLengthId = targetLengthId; + } + + public void setSpeciesLabel(String speciesLabel) { + this.speciesLabel = speciesLabel; + } + + public void setPropertyName(String propertyName) { + this.propertyName = propertyName; + } + + public void setNewValue(Float newValue) { + this.newValue = newValue; + } +} View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/58a536835f17b71c3cb8a60ddfcf... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/58a536835f17b71c3cb8a60ddfcf... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT