Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: d553e3ff by Tony Chemit at 2022-04-16T10:58:42+02:00 Stats dans la nouvelle présentation de l'arbre - Closes ultreiaio/ird-observe#2263 - - - - - 3898e8a3 by Tony Chemit at 2022-04-16T10:59:18+02:00 Amélioration de l'action déplacer des données - Closes ultreiaio/ird-observe#2102 - - - - - 486c6ed9 by Tony Chemit at 2022-04-16T11:10:25+02:00 update pom - - - - - 3a4e870a by Tony Chemit at 2022-04-16T11:14:57+02:00 toolkit in snapshot - - - - - 15 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/layout/ContentLayoutUINavigationHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/layout/ContentLayoutUINavigationInitializer.java - core/api/dto/src/test/resources/fixtures/api.properties - core/persistence/java/src/main/java/fr/ird/observe/entities/Entities.java - core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripSpi.java - + core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySampleReplicateRequestCallback.java - + core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/LogbookReplicateRequestCallback.java - + core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/ObservationReplicateRequestCallback.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripReplicatePartialRequestCallback.java - + core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ObservationReplicateRequestCallback.java - core/persistence/java/src/test/resources/fixtures/persistence.properties - model/src/main/models/Observe/dto/class/decorator.properties - model/src/main/models/Observe/dto/class/decoratorWithClassifier.properties - pom.xml Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/layout/ContentLayoutUINavigationHandler.java ===================================== @@ -53,7 +53,7 @@ public abstract class ContentLayoutUINavigationHandler<N extends ContentLayoutUI @Override public final String getText() { - return getNode().getScope().getI18nTranslation("type"); + return getNode().getInitializer().getText(); } @Override ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/layout/ContentLayoutUINavigationInitializer.java ===================================== @@ -28,6 +28,8 @@ import fr.ird.observe.client.datasource.editor.api.navigation.tree.NavigationSco import fr.ird.observe.dto.data.DataGroupByDto; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.reference.DtoReference; +import io.ultreia.java4all.decoration.Decorator; +import io.ultreia.java4all.util.SingletonSupplier; import java.util.Objects; import java.util.function.Function; @@ -43,18 +45,37 @@ public class ContentLayoutUINavigationInitializer extends NavigationInitializer< * How to get show data information. */ private final Function<DtoReference, Boolean> showData; + private final SingletonSupplier<String> textSupplier; private DataDtoReference reference; + private Decorator decorator; public ContentLayoutUINavigationInitializer(NavigationScope scope, DataDtoReference reference) { super(scope); this.reference = Objects.requireNonNull(reference); String showDataPropertyName = scope.getShowDataPropertyName(); this.showData = showDataPropertyName == null ? e -> true : e -> e.get(showDataPropertyName); + this.textSupplier = SingletonSupplier.of(this::computeText); + + } + + private String computeText() { + String result; + if (isShowData()) { + // add statistics + result = decorator.decorate(reference); + } else { + result = getScope().getI18nTranslation("type"); + + } + return result; } @Override protected Object init(NavigationContext<ContentLayoutUINavigationContext> context) { context.initReference(reference); + String decoratorClassifier = getScope().getMainType().getSimpleName().replace("Dto", ""); + decorator = context.getDecoratorService().getDecoratorByType(reference.getReferenceType(), decoratorClassifier); + return getScope().getMainType(); } @@ -65,6 +86,7 @@ public class ContentLayoutUINavigationInitializer extends NavigationInitializer< @Override protected void reload(NavigationContext<ContentLayoutUINavigationContext> context) { // parentReference = context.reloadReference(parentReference); + textSupplier.clear(); } public boolean isShowData() { @@ -94,6 +116,10 @@ public class ContentLayoutUINavigationInitializer extends NavigationInitializer< return reference; } + public String getText() { + return textSupplier.get(); + } + public String getSelectedId() { return getReference().getId(); } ===================================== core/api/dto/src/test/resources/fixtures/api.properties ===================================== @@ -21,7 +21,7 @@ ### DATA_FORM_COUNT=57 REFERENTIAL_FORM_COUNT=91 -DECORATOR_DEFINITIONS_COUNT=569 +DECORATOR_DEFINITIONS_COUNT=573 DataGroupByDtoToDefinitionMapping.count=24 ReferenceDtoToDtoClassMapping.count=157 DtoToReferenceDtoMapping.count=157 ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/Entities.java ===================================== @@ -62,4 +62,22 @@ public class Entities { java.sql.Date date = resultSet.getDate(dateColumnIndex); return createPoint(type, date, resultSet, dateColumnIndex + 1); } + + public static String updateLlTripVersion(String id, String now) { + return String.format("UPDATE ll_common.Trip SET" + + " topiaVersion = topiaVersion + 1," + + " lastUpdateDate = '%s'::timestamp WHERE topiaId = '%s';", now, id); + } + + public static String updatePsTripVersion(String id, String now) { + return String.format("UPDATE ps_common.Trip SET" + + " topiaVersion = topiaVersion + 1," + + " lastUpdateDate = '%s'::timestamp WHERE topiaId = '%s';", now, id); + } + + public static String updateLastUpdateDate(String id, String now) { + return String.format("UPDATE common.LastUpdateDate SET" + + " topiaVersion = topiaVersion + 1," + + " lastUpdateDate = '%s'::timestamp WHERE type = '%s';", now, id); + } } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/ObserveTopiaApplicationContext.java ===================================== @@ -49,6 +49,7 @@ import org.nuiton.topia.service.sql.plan.copy.TopiaEntitySqlCopyPlanModel; import org.nuiton.topia.service.sql.plan.delete.TopiaEntitySqlDeletePlanModel; import org.nuiton.topia.service.sql.plan.replicate.TopiaEntitySqlReplicatePlanModel; import org.nuiton.topia.service.sql.request.ReplicatePartialRequestCallback; +import org.nuiton.topia.service.sql.request.ReplicateRequestCallback; import org.nuiton.topia.service.sql.usage.TopiaEntitySqlUsageModel; import java.util.Date; @@ -116,6 +117,11 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return ObserveTopiaEntitySqlModelResource.get().getReplicatePartialRequestCallbacks(); } + @Override + public Set<ReplicateRequestCallback> getReplicateRequestCallbacks() { + return ObserveTopiaEntitySqlModelResource.get().getReplicateRequestCallbacks(); + } + @Override public final TagValues getDtoTagValues() { return ObserveTopiaEntitySqlModelResource.get().getDtoTagValues(); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripSpi.java ===================================== @@ -32,13 +32,15 @@ import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.referential.common.SpeciesReference; import fr.ird.observe.dto.referential.ll.common.VesselActivityReference; import fr.ird.observe.entities.data.ll.logbook.Activity; +import fr.ird.observe.entities.referential.common.DataQuality; import fr.ird.observe.entities.referential.common.Ocean; +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.ll.common.ObservationMethod; +import fr.ird.observe.entities.referential.ll.common.Program; import fr.ird.observe.spi.service.ServiceContext; import io.ultreia.java4all.util.Dates; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import java.util.Date; import java.util.LinkedHashSet; @@ -53,36 +55,49 @@ import java.util.stream.Stream; * @since 9.0.0 */ public class TripSpi extends GeneratedTripSpi { - private static final Logger log = LogManager.getLogger(TripSpi.class); - - @SuppressWarnings("UnusedReturnValue") - public static boolean copyTripLogbookMetaData(Trip oldTrip, Trip newTrip) { - if (!newTrip.isLogbookAvailability()) { - // copy logbook meta-data to new trip - log.info(String.format("Add logbook metadata to trip: %s", newTrip.getTopiaId())); - newTrip.setLogbookAvailability(true); - newTrip.setLogbookComment(oldTrip.getLogbookComment()); - newTrip.setLogbookDataEntryOperator(oldTrip.getLogbookDataEntryOperator()); - newTrip.setLogbookDataQuality(oldTrip.getLogbookDataQuality()); - return true; - } - return false; + + public String copyLogbookMetadata(Trip trip, String newId) { + Program logbookProgram = trip.getLogbookProgram(); + String logbookComment = trip.getLogbookComment(); + Person logbookDataEntryOperator = trip.getLogbookDataEntryOperator(); + DataQuality logbookDataQuality = trip.getLogbookDataQuality(); + return String.format("UPDATE ll_common.Trip SET" + + " logbookProgram = %s," + + " logbookAvailability = TRUE," + + " logbookDataEntryOperator = %s," + + " logbookDataQuality = %s," + + " logbookComment = %s" + + " WHERE topiaId = '%s';", + toId(logbookProgram), + toId(logbookDataEntryOperator), + toId(logbookDataQuality), + escapeComment(logbookComment), + newId); } - @SuppressWarnings("UnusedReturnValue") - public static boolean copyTripObservationMetaData(Trip oldTrip, Trip newTrip) { - if (!newTrip.isObservationsAvailability()) { - // copy observation meta-data to new trip - log.info(String.format("Add observation metadata to trip: %s", newTrip.getTopiaId())); - newTrip.setObservationsAvailability(true); - newTrip.setObservationsComment(oldTrip.getObservationsComment()); - newTrip.setObservationMethod(oldTrip.getObservationMethod()); - newTrip.setObserver(oldTrip.getObserver()); - newTrip.setObservationsDataEntryOperator(oldTrip.getObservationsDataEntryOperator()); - newTrip.setObservationsDataQuality(oldTrip.getObservationsDataQuality()); - return true; - } - return false; + public String copyObservationsMetadata(Trip trip, String newId) { + Program observationsProgram = trip.getObservationsProgram(); + String observationsComment = trip.getObservationsComment(); + Person observationsDataEntryOperator = trip.getObservationsDataEntryOperator(); + DataQuality observationsDataQuality = trip.getObservationsDataQuality(); + ObservationMethod observationMethod = trip.getObservationMethod(); + Person observer = trip.getObserver(); + return String.format("UPDATE ll_common.Trip SET" + + " observationsProgram = %s," + + " observationsAvailability = TRUE," + + " observationsDataEntryOperator = %s," + + " observationsDataQuality = %s," + + " observationsMethod = %s," + + " observer = %s," + + " observationsComment = %s" + + " WHERE topiaId = '%s';", + toId(observationsProgram), + toId(observationsDataEntryOperator), + toId(observationsDataQuality), + toId(observationMethod), + toId(observer), + escapeComment(observationsComment), + newId); } @Override ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySampleReplicateRequestCallback.java ===================================== @@ -0,0 +1,78 @@ +package fr.ird.observe.entities.data.ll.logbook; + +/*- + * #%L + * ObServe Core :: Persistence :: Java + * %% + * Copyright (C) 2008 - 2022 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.auto.service.AutoService; +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.ToolkitTopiaPersistenceContextSupport; +import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripTopiaDao; +import org.nuiton.topia.persistence.internal.AbstractTopiaPersistenceContext; +import org.nuiton.topia.persistence.script.SqlScriptWriter; +import org.nuiton.topia.service.sql.internal.SqlRequestSetConsumerContext; +import org.nuiton.topia.service.sql.request.ReplicateRequest; +import org.nuiton.topia.service.sql.request.ReplicateRequestCallback; + +import static fr.ird.observe.spi.context.DataDtoEntityContext.timestamp; + +/** + * Replicate call back for Activity Sample to a Trip. + * <p> + * Created on 15/04/2022. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 9.0.0 + */ +@AutoService(ReplicateRequestCallback.class) +public class ActivitySampleReplicateRequestCallback implements ReplicateRequestCallback { + + @Override + public boolean accept(ReplicateRequest request) { + return !request.getOldParentId().contains(".Trip#") + && request.getNewParentId().contains(".Trip#") + && request.getDataType().equals(Sample.class.getName()); + } + + @Override + public void consume(ReplicateRequest request, SqlRequestSetConsumerContext sourcePersistenceContext) { + SqlScriptWriter writer = sourcePersistenceContext.getWriter(); + + AbstractTopiaPersistenceContext persistenceContext = sourcePersistenceContext.getSourcePersistenceContext(); + TripTopiaDao tripDao = Trip.getDao(persistenceContext); + boolean newTripModified = false; + String oldId = request.getOldParentId(); + String oldTripId = Activity.SPI.getParentId((ToolkitTopiaPersistenceContextSupport) persistenceContext, oldId).getId(); + Trip oldTrip = tripDao.forTopiaIdEquals(oldTripId).findUnique(); + String newId = request.getNewParentId(); + Trip newTrip = tripDao.forTopiaIdEquals(newId).findUnique(); + if (!newTrip.isLogbookAvailability()) { + newTripModified = true; + writer.writeSql(Trip.SPI.copyLogbookMetadata(oldTrip, newId)); + } + String now = timestamp(sourcePersistenceContext.now()); + writer.writeSql(Entities.updateLlTripVersion(oldId, now)); + if (newTripModified) { + writer.writeSql(Entities.updateLlTripVersion(newId, now)); + } + } +} ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/LogbookReplicateRequestCallback.java ===================================== @@ -0,0 +1,73 @@ +package fr.ird.observe.entities.data.ll.logbook; + +/*- + * #%L + * ObServe Core :: Persistence :: Java + * %% + * Copyright (C) 2008 - 2022 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.auto.service.AutoService; +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripTopiaDao; +import org.nuiton.topia.persistence.script.SqlScriptWriter; +import org.nuiton.topia.service.sql.internal.SqlRequestSetConsumerContext; +import org.nuiton.topia.service.sql.request.ReplicateRequest; +import org.nuiton.topia.service.sql.request.ReplicateRequestCallback; + +import static fr.ird.observe.spi.context.DataDtoEntityContext.timestamp; + +/** + * Replicate call back for any logbook data from a Trip to a Trip. + * <p> + * Created on 15/04/2022. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 9.0.0 + */ +@AutoService(ReplicateRequestCallback.class) +public class LogbookReplicateRequestCallback implements ReplicateRequestCallback { + + @Override + public boolean accept(ReplicateRequest request) { + return request.getOldParentId().contains(".Trip#") + && request.getNewParentId().contains(".Trip#") + && request.getDataType().startsWith(fr.ird.observe.spi.module.ll.logbook.BusinessDataPackage.get().getPackageName()); + } + + @Override + public void consume(ReplicateRequest request, SqlRequestSetConsumerContext sourcePersistenceContext) { + SqlScriptWriter writer = sourcePersistenceContext.getWriter(); + TripTopiaDao dao = Trip.getDao(sourcePersistenceContext.getSourcePersistenceContext()); + boolean newTripModified = false; + String oldId = request.getOldParentId(); + Trip oldTrip = dao.forTopiaIdEquals(oldId).findUnique(); + String newId = request.getNewParentId(); + Trip newTrip = dao.forTopiaIdEquals(newId).findUnique(); + if (!newTrip.isLogbookAvailability()) { + newTripModified = true; + writer.writeSql(Trip.SPI.copyLogbookMetadata(oldTrip, newId)); + } + String now = timestamp(sourcePersistenceContext.now()); + writer.writeSql(Entities.updateLlTripVersion(oldId, now)); + if (newTripModified) { + writer.writeSql(Entities.updateLlTripVersion(newId, now)); + } + } +} ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/ObservationReplicateRequestCallback.java ===================================== @@ -0,0 +1,73 @@ +package fr.ird.observe.entities.data.ll.observation; + +/*- + * #%L + * ObServe Core :: Persistence :: Java + * %% + * Copyright (C) 2008 - 2022 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.auto.service.AutoService; +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripTopiaDao; +import org.nuiton.topia.persistence.script.SqlScriptWriter; +import org.nuiton.topia.service.sql.internal.SqlRequestSetConsumerContext; +import org.nuiton.topia.service.sql.request.ReplicateRequest; +import org.nuiton.topia.service.sql.request.ReplicateRequestCallback; + +import static fr.ird.observe.spi.context.DataDtoEntityContext.timestamp; + +/** + * Replicate call back for any observation data from a Trip to a Trip. + * <p> + * Created on 15/04/2022. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 9.0.0 + */ +@AutoService(ReplicateRequestCallback.class) +public class ObservationReplicateRequestCallback implements ReplicateRequestCallback { + + @Override + public boolean accept(ReplicateRequest request) { + return request.getOldParentId().contains(".Trip#") + && request.getNewParentId().contains(".Trip#") + && request.getDataType().startsWith(fr.ird.observe.spi.module.ll.observation.BusinessDataPackage.get().getPackageName()); + } + + @Override + public void consume(ReplicateRequest request, SqlRequestSetConsumerContext sourcePersistenceContext) { + SqlScriptWriter writer = sourcePersistenceContext.getWriter(); + TripTopiaDao dao = Trip.getDao(sourcePersistenceContext.getSourcePersistenceContext()); + boolean newTripModified = false; + String oldId = request.getOldParentId(); + Trip oldTrip = dao.forTopiaIdEquals(oldId).findUnique(); + String newId = request.getNewParentId(); + Trip newTrip = dao.forTopiaIdEquals(newId).findUnique(); + if (!newTrip.isObservationsAvailability()) { + newTripModified = true; + writer.writeSql(Trip.SPI.copyObservationsMetadata(oldTrip, newId)); + } + String now = timestamp(sourcePersistenceContext.now()); + writer.writeSql(Entities.updateLlTripVersion(oldId, now)); + if (newTripModified) { + writer.writeSql(Entities.updateLlTripVersion(newId, now)); + } + } +} ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripReplicatePartialRequestCallback.java ===================================== @@ -23,6 +23,7 @@ package fr.ird.observe.entities.data.ps.common; */ import com.google.auto.service.AutoService; +import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.ps.landing.Landing; import org.nuiton.topia.persistence.script.SqlScriptWriter; @@ -131,25 +132,13 @@ public class TripReplicatePartialRequestCallback implements ReplicatePartialRequ newTripModified = true; } String now = timestamp(sourcePersistenceContext.now()); - writer.writeSql(updateTripVersion(oldId, now)); + writer.writeSql(Entities.updatePsTripVersion(oldId, now)); if (newTripModified) { - writer.writeSql(updateTripVersion(newId, now)); + writer.writeSql(Entities.updatePsTripVersion(newId, now)); } for (Class<? extends DataEntity> lastUpdateDate : lastUpdateDates) { - writer.writeSql(updateLastUpdateDate(lastUpdateDate.getName(), now)); + writer.writeSql(Entities.updateLastUpdateDate(lastUpdateDate.getName(), now)); } } - public String updateTripVersion(String id, String now) { - return String.format("UPDATE ps_common.Trip SET" + - " topiaVersion = topiaVersion + 1," + - " lastUpdateDate = '%s'::timestamp WHERE topiaId = '%s';", now, id); - } - - public String updateLastUpdateDate(String id, String now) { - return String.format("UPDATE common.LastUpdateDate SET" + - " topiaVersion = topiaVersion + 1," + - " lastUpdateDate = '%s'::timestamp WHERE type = '%s';", now, id); - } - } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/ObservationReplicateRequestCallback.java ===================================== @@ -0,0 +1,73 @@ +package fr.ird.observe.entities.data.ps.observation; + +/*- + * #%L + * ObServe Core :: Persistence :: Java + * %% + * Copyright (C) 2008 - 2022 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.auto.service.AutoService; +import fr.ird.observe.entities.Entities; +import fr.ird.observe.entities.data.ps.common.Trip; +import fr.ird.observe.entities.data.ps.common.TripTopiaDao; +import org.nuiton.topia.persistence.script.SqlScriptWriter; +import org.nuiton.topia.service.sql.internal.SqlRequestSetConsumerContext; +import org.nuiton.topia.service.sql.request.ReplicateRequest; +import org.nuiton.topia.service.sql.request.ReplicateRequestCallback; + +import static fr.ird.observe.spi.context.DataDtoEntityContext.timestamp; + +/** + * Replicate call back for any observation data from a Trip to a Trip. + * <p> + * Created on 15/04/2022. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 9.0.0 + */ +@AutoService(ReplicateRequestCallback.class) +public class ObservationReplicateRequestCallback implements ReplicateRequestCallback { + + @Override + public boolean accept(ReplicateRequest request) { + return request.getOldParentId().contains(".Trip#") + && request.getNewParentId().contains(".Trip#") + && request.getDataType().startsWith(fr.ird.observe.spi.module.ll.observation.BusinessDataPackage.get().getPackageName()); + } + + @Override + public void consume(ReplicateRequest request, SqlRequestSetConsumerContext sourcePersistenceContext) { + SqlScriptWriter writer = sourcePersistenceContext.getWriter(); + TripTopiaDao dao = Trip.getDao(sourcePersistenceContext.getSourcePersistenceContext()); + boolean newTripModified = false; + String oldId = request.getOldParentId(); + Trip oldTrip = dao.forTopiaIdEquals(oldId).findUnique(); + String newId = request.getNewParentId(); + Trip newTrip = dao.forTopiaIdEquals(newId).findUnique(); + if (!newTrip.isObservationsFilled()) { + newTripModified = true; + writer.writeSql(Trip.SPI.copyObservationsMetadata(oldTrip, newId)); + } + String now = timestamp(sourcePersistenceContext.now()); + writer.writeSql(Entities.updatePsTripVersion(oldId, now)); + if (newTripModified) { + writer.writeSql(Entities.updatePsTripVersion(newId, now)); + } + } +} ===================================== core/persistence/java/src/test/resources/fixtures/persistence.properties ===================================== @@ -19,7 +19,7 @@ # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% ### -DECORATOR_DEFINITIONS_COUNT=785 +DECORATOR_DEFINITIONS_COUNT=791 DataGroupByEntityToDefinitionMapping.count=24 EntityToDtoClassMapping.count=308 DtoToEntityContextMapping.count=185 ===================================== model/src/main/models/Observe/dto/class/decorator.properties ===================================== @@ -55,10 +55,10 @@ data.ll.observation.WeightMeasure=${weightMeasureType::label}##${weight} data.ll.pairing.ActivityPairingResultItem=${observationActivity}##$(observe.data.ll.pairing.ActivityPairingResultItem.computedDistance) ${computedDistance}##$(observe.data.ll.pairing.ActivityPairingResultItem.computedTime) ${computedTimeStr} data.ps.common.GearUseFeatures=${gear::label}##${number} data.ps.common.GearUseFeaturesMeasurement=${gearCharacteristic::label}##${measurementValue} -data.ps.common.Trip=${startDate::date}##${endDate::date}##${vessel::label}##${vesselCode}##${routeObsSize}##${routeLogbookSize}##${sampleSize} +data.ps.common.Trip=${startDate::date}##${endDate::date}##${vessel::label}##${vesselCode}##( ${routeObsSize}##${routeLogbookSize}##${sampleSize} ) data.ps.common.TripGearUseFeatures=$(observe.data.ps.common.TripGearUseFeatures.type)##${gearUseFeaturesSize} -data.ps.common.TripLocalmarket=$(observe.data.ps.common.TripLocalmarket.type)##${localmarketBatchSize}##${localmarketSurveySize}##${localmarketSampleSize} -data.ps.common.TripLogbook=$(observe.data.ps.common.TripLogbook.type)##${routeLogbookSize}##${sampleSize}##${wellPlanSize} +data.ps.common.TripLocalmarket=$(observe.data.ps.common.TripLocalmarket.type)##( ${localmarketBatchSize}##${localmarketSurveySize}##${localmarketSampleSize} ) +data.ps.common.TripLogbook=$(observe.data.ps.common.TripLogbook.type)##( ${routeLogbookSize}##${sampleSize}##${wellPlanSize} ) data.ps.dcp.FloatingObjectPreset=${this::label} data.ps.landing.Landing=${species::speciesLabel}##${weightCategory::label}##${weight} data.ps.landing.TripLanding=$(observe.data.ps.landing.TripLanding.type)##${landingSize} ===================================== model/src/main/models/Observe/dto/class/decoratorWithClassifier.properties ===================================== @@ -23,7 +23,7 @@ data.ll.common.Trip=Short|${startDate::date}##${endDate::date}##${vessel::label} data.ll.observation.Basket=OnlyHaulingIdentifier|${haulingIdentifier} data.ll.observation.Branchline=OnlyHaulingIdentifier|${haulingIdentifier} data.ll.observation.Section=OnlyHaulingIdentifier|${haulingIdentifier} -data.ps.common.Trip=Short|${startDate::date}##${endDate::date}##${vessel::label}##${vesselCode} +data.ps.common.Trip=Short|${startDate::date}##${endDate::date}##${vessel::label}##${vesselCode}~TripLocalmarket|$(observe.data.ps.common.TripLocalmarket.type)##( ${localmarketBatchSize}##${localmarketSurveySize}##${localmarketSampleSize} )~TripLogbook|$(observe.data.ps.common.TripLogbook.type)##( ${routeLogbookSize}##${sampleSize}##${wellPlanSize} ) data.ps.logbook.Activity=WithRoute|${date::date}##${time::niceTime}##${number}##${vesselActivity::label} data.ps.observation.Activity=WithRoute|${date::date}##${time::niceTime}##${vesselActivity::label} presets.RemoteDataSourceConfiguration=WithUrl|${name}##${url} ===================================== pom.xml ===================================== @@ -23,7 +23,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2022.43</version> + <version>2022.44</version> </parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> @@ -121,6 +121,7 @@ </site> </distributionManagement> <properties> + <lib.version.java4all.topia>1.75-SNAPSHOT</lib.version.java4all.topia> <organizationId>ultreiaio</organizationId> <projectId>ird-observe</projectId> <stageId>frirdobserve</stageId> @@ -155,7 +156,7 @@ <!-- build timestamp configuration --> <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <lib.version.toolkit>6.0.8</lib.version.toolkit> + <lib.version.toolkit>6.0.9-SNAPSHOT</lib.version.toolkit> <lib.version.ognl>3.1.29</lib.version.ognl> <!-- FIXME <lib.version.ognl>3.3.2</lib.version.ognl>--> <lib.version.h2>1.4.196</lib.version.h2> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/7d9dfc2dbd871ee29c77ac599... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/7d9dfc2dbd871ee29c77ac599... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)