Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 3682dc3f by Tony Chemit at 2023-01-14T17:34:05+01:00 Revoir le calcul et la mise à jour du type de banc de la calée - Closes #2573 - - - - - 7 changed files: - 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/common/TripSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityImpl.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java - model/src/main/models/Observe/persistence/20-data-ps-observation.model - model/src/main/models/Observe/persistence/21-data-ps-logbook.model Changes: ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripConsolidateEngine.java ===================================== @@ -242,7 +242,7 @@ public class TripConsolidateEngine { return; } fr.ird.observe.entities.referential.ps.common.SchoolType oldSchoolType = set.getSchoolType(); - String newSchoolTypeId = activity.getSchoolTypeId(); + String newSchoolTypeId = activity.computeSchoolTypeId(); if (oldSchoolType == null || !oldSchoolType.getTopiaId().equals(newSchoolTypeId)) { // le type de banc a changé, on doit sauver l'activité SchoolType newSchoolType = SchoolType.loadEntity(context, newSchoolTypeId); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripSpi.java ===================================== @@ -43,14 +43,12 @@ import fr.ird.observe.entities.referential.common.Person; import fr.ird.observe.entities.referential.common.Species; import fr.ird.observe.entities.referential.common.SpeciesList; import fr.ird.observe.entities.referential.ps.common.AcquisitionStatus; -import fr.ird.observe.entities.referential.ps.common.ObservedSystem; import fr.ird.observe.entities.referential.ps.common.Program; import fr.ird.observe.entities.referential.ps.logbook.WellContentStatus; import fr.ird.observe.spi.service.ServiceContext; import io.ultreia.java4all.util.Dates; import io.ultreia.java4all.util.sql.SqlScriptWriter; -import java.util.Collection; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; @@ -58,7 +56,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.function.Function; -import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -68,45 +65,8 @@ import java.util.stream.Stream; * @author Tony Chemit - dev@tchemit.fr * @since 9.0.0 */ -@SuppressWarnings("SpellCheckingInspection") public class TripSpi extends GeneratedTripSpi { - /** - * Calcule le type de banc d'une activité. - * <p> - * par défaut, on considère la caléee sur BL. - * <p> - * Si l'activité possède au moins un système observe de type BO alors la caléee est de type BO. - * - * @param floatingObjectEmpty y a til des dcp - * @param getObservedSystem pour obtenir les systèmes observés - * @return le type de banc a appliquer - * @since 1.5 - */ - public static String computeSchoolTypeId(Supplier<Boolean> floatingObjectEmpty, Supplier<Collection<ObservedSystem>> getObservedSystem) { - - String schoolTypeId; - - if (floatingObjectEmpty.get()) { - // see https://gitlab.com/ultreiaio/ird-observe/issues/938 - return ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_OBJECT_ID; - } - - // par defaut, on suppose que la set est sur BL - schoolTypeId = ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_FREE_ID; - - // des systèmes observés sont connus, si un des système est sur banc objet, alors la set est considérée sur BO - for (ObservedSystem s : getObservedSystem.get()) { - if (ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_OBJECT_ID.equals(s.getSchoolType().getTopiaId())) { - - // set sur BO - schoolTypeId = ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_OBJECT_ID; - break; - } - } - return schoolTypeId; - } - public static void updateTrip(SqlScriptWriter writer, Set<Class<? extends DataEntity>> lastUpdateDates, String oldId, String newId, String now) { writer.writeSql(updateTripVersion(oldId, now)); writer.writeSql(updateTripVersion(newId, now)); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/logbook/ActivityImpl.java ===================================== @@ -23,7 +23,6 @@ package fr.ird.observe.entities.data.ps.logbook; */ import fr.ird.observe.dto.referential.ps.common.VesselActivityReference; -import fr.ird.observe.entities.data.ps.common.TripSpi; import io.ultreia.java4all.util.Dates; import java.util.Date; @@ -43,11 +42,6 @@ public class ActivityImpl extends ActivityAbstract { return VesselActivityReference.isSetOperation(getVesselActivity()) ? 1 : 0; } - @Override - public String getSchoolTypeId() { - return TripSpi.computeSchoolTypeId(this::isFloatingObjectNotEmpty, this::getObservedSystem); - } - @Override public Date getDate() { return getTime() == null ? null : Dates.getDay(getTime()); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ActivityImpl.java ===================================== @@ -21,8 +21,9 @@ */ package fr.ird.observe.entities.data.ps.observation; +import fr.ird.observe.dto.ProtectedIdsPs; import fr.ird.observe.dto.referential.ps.common.VesselActivityReference; -import fr.ird.observe.entities.data.ps.common.TripSpi; +import fr.ird.observe.entities.referential.ps.common.ObservedSystem; import io.ultreia.java4all.util.Dates; import java.util.Date; @@ -39,9 +40,25 @@ public class ActivityImpl extends ActivityAbstract { return VesselActivityReference.isEndOfSearchingOperation(vesselActivity); } + /** + * Compute {@link Set#getSchoolType()}. + * <p> + * If activity contains at least one observed system with {@code Object school type} then return it, + * otherwise use {@code Free school type}. + * + * @return computed school type + * @since 1.5 + */ @Override - public String getSchoolTypeId() { - return TripSpi.computeSchoolTypeId(this::isFloatingObjectNotEmpty, this::getObservedSystem); + public String computeSchoolTypeId() { + for (ObservedSystem s : getObservedSystem()) { + if (ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_OBJECT_ID.equals(s.getSchoolType().getTopiaId())) { + // set on object school type + return ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_OBJECT_ID; + } + } + // if no observed system on object school type, use free school type. + return ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_FREE_ID; } @Override ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SetSpi.java ===================================== @@ -22,6 +22,7 @@ package fr.ird.observe.entities.data.ps.observation; * #L% */ +import fr.ird.observe.dto.ProtectedIdsPs; import fr.ird.observe.dto.data.ps.observation.SetDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.referential.ReferentialLocale; @@ -57,9 +58,9 @@ public class SetSpi extends GeneratedSetSpi { // pour les dates de fin on utilise la date de la route preCreated.setEndTimeStamp(Dates.getDateAndTime(routeDate, date, false, false)); preCreated.setHaulingEndTimeStamp(Dates.getDateAndTime(routeDate, date, false, false)); - // recuperation du type de set a partir de l'activité - String schoolTypeId = parent.getSchoolTypeId(); - SchoolType schoolType = SchoolType.loadEntity(context, schoolTypeId); + // by default, school type is undefined, and only computed by consolidation action + // See https://gitlab.com/ultreiaio/ird-observe/-/issues/2573 + SchoolType schoolType = SchoolType.loadEntity(context, ProtectedIdsPs.PS_COMMON_SCHOOL_TYPE_UNDEFINED_ID); preCreated.setSchoolType(schoolType); Form<SetDto> form = super.preCreate(context, parent, preCreated); form.getObject().setStartSetDate(routeDate); ===================================== model/src/main/models/Observe/persistence/20-data-ps-observation.model ===================================== @@ -31,7 +31,7 @@ currentFpaZone {*:0..1} referential.common.FpaZone previousFpaZone {*:0..1} referential.common.FpaZone nextFpaZone {*:0..1} referential.common.FpaZone dataQuality {*:0..1} referential.common.DataQuality -getSchoolTypeId() String +computeSchoolTypeId() String isActivityEndOfSearching() boolean getDate() Date ===================================== model/src/main/models/Observe/persistence/21-data-ps-logbook.model ===================================== @@ -30,7 +30,6 @@ informationSource {*:0..1} referential.ps.logbook.InformationSource reasonForNoFishing {*:0..1} referential.ps.common.ReasonForNoFishing setSuccessStatus {*:0..1} referential.ps.logbook.SetSuccessStatus reasonForNullSet {*:0..1} referential.ps.common.ReasonForNullSet -getSchoolTypeId() String getDate() Date data.ps.logbook.Catch > data.DataEntity >> fr.ird.observe.dto.data.WellIdAware View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/3682dc3f6e00362e263ecdd8ff... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/3682dc3f6e00362e263ecdd8ff... You're receiving this email because of your account on gitlab.com.