This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 4219603bae1c33a8c25ddcedfa23fb799792af48 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Sep 7 17:39:09 2016 +0200 Fix legacy synchronization always play insert, then update and finally delete request in this order + begin de fix fixes... --- .../swing/db/ObserveSwingDataSource.java | 18 ++-- .../swing/ui/admin/save/SaveLocalUIHandler.java | 2 +- .../referential/legacy/SynchronizeUIHandler.java | 9 +- .../v1/LastUpdateDateServiceController.java | 26 ++++++ ...ferentialSynchronizeLocalServiceController.java | 5 ++ application-web/src/main/resources/mapping | 3 + .../services/topia/ObserveServiceTopia.java | 100 +-------------------- .../topia/service/LastUpdateDateServiceTopia.java | 88 ++++++++++++++++++ .../topia/service/ReferentialServiceTopia.java | 15 ++-- ...nalReferentialSynchronizeLocalServiceTopia.java | 21 ++++- .../ActivityLongLineEncounterServiceTopia.java | 3 +- .../ActivityLongLineSensorUsedServiceTopia.java | 3 +- .../longline/ActivityLonglineServiceTopia.java | 4 +- .../longline/SetLonglineCatchServiceTopia.java | 3 +- .../SetLonglineDetailCompositionServiceTopia.java | 4 +- .../SetLonglineGlobalCompositionServiceTopia.java | 3 +- .../service/longline/SetLonglineServiceTopia.java | 4 +- .../topia/service/longline/TdrServiceTopia.java | 3 +- .../longline/TripLonglineGearUseServiceTopia.java | 4 +- .../service/longline/TripLonglineServiceTopia.java | 4 +- .../ActivitySeineObservedSystemServiceTopia.java | 3 +- .../service/seine/ActivitySeineServiceTopia.java | 4 +- .../service/seine/FloatingObjectServiceTopia.java | 4 +- .../service/seine/NonTargetCatchServiceTopia.java | 4 +- .../seine/ObjectObservedSpeciesServiceTopia.java | 3 +- .../seine/ObjectSchoolEstimateServiceTopia.java | 3 +- .../topia/service/seine/RouteServiceTopia.java | 4 +- .../service/seine/SchoolEstimateServiceTopia.java | 4 +- .../topia/service/seine/SetSeineServiceTopia.java | 4 +- .../TransmittingBuoyOperationServiceTopia.java | 3 +- .../seine/TripSeineGearUseServiceTopia.java | 3 +- .../topia/service/seine/TripSeineServiceTopia.java | 3 +- .../UnidirectionalSynchronizeReferentialTest.java | 32 +++---- .../services/ObserveServiceInitializer.java | 1 - .../observe/services/ObserveServicesProvider.java | 3 + .../services/service/LastUpdateDateService.java | 16 ++++ .../services/service/ReferentialService.java | 1 - ...UnidirectionalReferentialSynchronizeEngine.java | 41 +++++---- ...ectionalReferentialSynchronizeLocalService.java | 5 ++ 39 files changed, 277 insertions(+), 186 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java index 3d23daa..5fd47a9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java @@ -31,36 +31,36 @@ import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceEvent; import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceListener; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.ObserveServiceInitializer; -import fr.ird.observe.services.runner.ObserveServiceMainFactory; import fr.ird.observe.services.ObserveServicesProvider; -import fr.ird.observe.services.dto.ObserveSpeciesListConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationAndConnection; -import fr.ird.observe.services.configuration.rest.ObserveDataSourceConfigurationRest; -import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaH2; -import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.configuration.ObserveDataSourceType; +import fr.ird.observe.services.configuration.rest.ObserveDataSourceConfigurationRest; +import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; +import fr.ird.observe.services.dto.ObserveSpeciesListConfiguration; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; +import fr.ird.observe.services.runner.ObserveServiceMainFactory; import fr.ird.observe.services.service.BabModelVersionException; import fr.ird.observe.services.service.DataSourceService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseDestroyNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; +import fr.ird.observe.services.service.LastUpdateDateService; import fr.ird.observe.services.service.ObserveReferentialCache; import fr.ird.observe.services.service.PingService; import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.services.service.SqlScriptProducerService; import fr.ird.observe.services.service.actions.consolidate.ConsolidateDataService; -import fr.ird.observe.services.service.trip.TripManagementService; import fr.ird.observe.services.service.actions.report.ReportService; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; @@ -92,6 +92,7 @@ import fr.ird.observe.services.service.seine.TargetSampleService; import fr.ird.observe.services.service.seine.TransmittingBuoyOperationService; import fr.ird.observe.services.service.seine.TripSeineGearUseService; import fr.ird.observe.services.service.seine.TripSeineService; +import fr.ird.observe.services.service.trip.TripManagementService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractSerializableBean; @@ -525,6 +526,11 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements } @Override + public LastUpdateDateService newLastUpdateDateService() { + return newService(LastUpdateDateService.class); + } + + @Override public SqlScriptProducerService newSqlScriptProducerService() { return newService(SqlScriptProducerService.class); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/save/SaveLocalUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/save/SaveLocalUIHandler.java index a33b432..fabb1fa 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/save/SaveLocalUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/save/SaveLocalUIHandler.java @@ -177,7 +177,7 @@ public class SaveLocalUIHandler extends AdminTabUIHandler { UnidirectionalReferentialSynchronizeContext referentialSynchronizeContext = stepModel.getReferentialSynchronizeContext(); - source.newUnidirectionalReferentialSynchronizeLocalService().applySqlRequests(referentialSynchronizeContext.getSqlRequests()); + stepModel.getEngine().finish(source.newUnidirectionalReferentialSynchronizeLocalService(), referentialSynchronizeContext); sendMessage(t("observe.actions.synchro.referential.message.apply.done", new Date())); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeUIHandler.java index a95ffea..8ab2b1d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeUIHandler.java @@ -33,6 +33,7 @@ import fr.ird.observe.services.service.actions.synchro.referential.legacy.Unidir import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeCallbackResults; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeContext; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeEngine; +import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeResult; import fr.ird.observe.application.swing.ui.admin.AdminStep; import fr.ird.observe.application.swing.ui.admin.AdminTabUIHandler; @@ -132,13 +133,14 @@ public class SynchronizeUIHandler extends AdminTabUIHandler { centralSource.newReferentialSynchronizeDiffService() ); + UnidirectionalReferentialSynchronizeLocalService localService = source.newUnidirectionalReferentialSynchronizeLocalService(); UnidirectionalReferentialSynchronizeEngine engine = new UnidirectionalReferentialSynchronizeEngine( - diffsEngine, source.newUnidirectionalReferentialSynchronizeLocalService() + diffsEngine ); stepModel.setEngine(engine); - UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = engine.prepareContext(); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = engine.prepareContext(localService); stepModel.setReferentialSynchronizeContext(unidirectionalReferentialSynchronizeContext); @@ -293,7 +295,8 @@ public class SynchronizeUIHandler extends AdminTabUIHandler { UnidirectionalReferentialSynchronizeCallbackResults referentialSynchronizeCallbackResults = stepModel.getReferentialSynchronizeCallbackResults(); - UnidirectionalReferentialSynchronizeResult referentialSynchronizeResult = engine.prepareResult(referentialSynchronizeContext, referentialSynchronizeCallbackResults); + UnidirectionalReferentialSynchronizeLocalService localService = stepModel.getSource().newUnidirectionalReferentialSynchronizeLocalService(); + UnidirectionalReferentialSynchronizeResult referentialSynchronizeResult = engine.prepareResult(localService, referentialSynchronizeContext, referentialSynchronizeCallbackResults); stepModel.setReferentialSynchronizeResult(referentialSynchronizeResult); if (referentialSynchronizeResult.isEmpty()) { diff --git a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/LastUpdateDateServiceController.java b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/LastUpdateDateServiceController.java new file mode 100644 index 0000000..7356fb6 --- /dev/null +++ b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/LastUpdateDateServiceController.java @@ -0,0 +1,26 @@ +package fr.ird.observe.application.web.controller.v1; + +import fr.ird.observe.services.service.LastUpdateDateService; + +/** + * Created on 07/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class LastUpdateDateServiceController extends ObserveServiceControllerSupport<LastUpdateDateService> implements LastUpdateDateService { + + public LastUpdateDateServiceController() { + super(LastUpdateDateService.class); + } + + @Override + public void updateReferentialLastUpdateDates() { + getAuthenticatedService().updateReferentialLastUpdateDates(); + } + + @Override + public void updateDataLastUpdateDates() { + getAuthenticatedService().updateDataLastUpdateDates(); + } +} diff --git a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java index f8c07da..d34935c 100644 --- a/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java +++ b/application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java @@ -61,4 +61,9 @@ public class UnidirectionalReferentialSynchronizeLocalServiceController extends getAuthenticatedService().applySqlRequests(sqlRequests); } + @Override + public void updateLastUpdateDates() { + getAuthenticatedService().updateLastUpdateDates(); + } + } diff --git a/application-web/src/main/resources/mapping b/application-web/src/main/resources/mapping index b29bbd0..5be1eda 100644 --- a/application-web/src/main/resources/mapping +++ b/application-web/src/main/resources/mapping @@ -74,6 +74,8 @@ GET /api/v1/v1/DataSourceService/getReferentialTypesInShell GET /api/v1/v1/DataSourceService/getUsers v1.DataSourceServiceController.getUsers GET /api/v1/v1/DataSourceService/migrateData v1.DataSourceServiceController.migrateData GET /api/v1/v1/DataSourceService/open v1.DataSourceServiceController.open +GET /api/v1/v1/LastUpdateDateService/updateDataLastUpdateDates v1.LastUpdateDateServiceController.updateDataLastUpdateDates +GET /api/v1/v1/LastUpdateDateService/updateReferentialLastUpdateDates v1.LastUpdateDateServiceController.updateReferentialLastUpdateDates GET /api/v1/v1/PingService/ping v1.PingServiceController.ping GET /api/v1/v1/ReferentialService/exists v1.ReferentialServiceController.exists GET /api/v1/v1/ReferentialService/findAllUsages v1.ReferentialServiceController.findAllUsages @@ -181,6 +183,7 @@ POST /api/v1/v1/actions/report/ReportService/populateVariables POST /api/v1/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffService/getReferentialReferenceSet v1.actions.synchro.referential.diff.ReferentialSynchronizeDiffServiceController.getReferentialReferenceSet POST /api/v1/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffService/getReferentials v1.actions.synchro.referential.diff.ReferentialSynchronizeDiffServiceController.getReferentials POST /api/v1/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/applySqlRequests v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceController.applySqlRequests +POST /api/v1/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService/updateLastUpdateDates v1.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalServiceController.updateLastUpdateDates POST /api/v1/v1/actions/synchro/referential/ng/ReferentialSynchronizeService/executeSqlsRequests v1.actions.synchro.referential.ng.ReferentialSynchronizeServiceController.executeSqlsRequests POST /api/v1/v1/actions/synchro/referential/ng/ReferentialSynchronizeService/produceSqlsRequest v1.actions.synchro.referential.ng.ReferentialSynchronizeServiceController.produceSqlsRequest POST /api/v1/v1/actions/validate/ValidateService/validateData v1.actions.validate.ValidateServiceController.validateData diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopia.java index 33ddd8c..b7fa47c 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/ObserveServiceTopia.java @@ -244,12 +244,6 @@ public abstract class ObserveServiceTopia implements ObserveService { return entity; } - protected <E extends ObserveDataEntity, D extends DataDto> E loadOrCreateEntityAndCheckLastUpdate(D dto) { - E entity = loadOrCreateEntityFromDataDto(dto); - checkLastUpdateDate(entity, dto); - return entity; - } - protected <E extends ObserveEntity, D extends IdDto> void checkLastUpdateDate(E entity, D dto) { if (entity.isPersisted()) { @@ -272,96 +266,6 @@ public abstract class ObserveServiceTopia implements ObserveService { return serviceContext.now(); } -// protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabaseFromDump(String prefix, byte... importContent) { -// ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); -// temporaryDataSourceConfiguration.setDbName("obstuna"); -// temporaryDataSourceConfiguration.setLabel(prefix); -// temporaryDataSourceConfiguration.setUsername("sa"); -// temporaryDataSourceConfiguration.setPassword('s', 'a'); -// File temporaryDataSourceDirectory = serviceContext.createTemporaryDirectory(prefix); -// temporaryDataSourceConfiguration.setDirectory(temporaryDataSourceDirectory); -// -// DataSourceService dataSourceService = serviceContext.newService(temporaryDataSourceConfiguration, DataSourceService.class); -// -// try { -// DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); -// dataSourceCreateConfiguration.setImportDatabase(importContent); -// dataSourceService.create(temporaryDataSourceConfiguration, dataSourceCreateConfiguration); -// } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { -// //FIXME Avoir une exception plus concrete -// throw new RuntimeException("Could not create temporary database: " + prefix, e); -// } -// -// return temporaryDataSourceConfiguration; -// } -// -// protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabase(String prefix) { -// -// ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); -// temporaryDataSourceConfiguration.setDbName("obstuna"); -// temporaryDataSourceConfiguration.setLabel(prefix); -// temporaryDataSourceConfiguration.setUsername("sa"); -// temporaryDataSourceConfiguration.setPassword('s', 'a'); -// File temporaryDataSourceDirectory = serviceContext.createTemporaryDirectory(prefix); -// temporaryDataSourceConfiguration.setDirectory(temporaryDataSourceDirectory); -// -// DataSourceService dataSourceService = serviceContext.newService(temporaryDataSourceConfiguration, DataSourceService.class); -// -// try { -// DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); -// dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); -// dataSourceService.create(temporaryDataSourceConfiguration, dataSourceCreateConfiguration); -// } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { -// //FIXME Avoir une exception plus concrete -// throw new RuntimeException("Could not create temporary database: " + prefix, e); -// } -// -// return temporaryDataSourceConfiguration; -// -// } - -// protected void replicateReferential(ObserveTopiaApplicationContext sourceTopiaApplicationContext, ObserveTopiaApplicationContext temporaryTopiaApplicationContext) { -// -// long t0 = System.nanoTime(); -// -// TopiaReplicationService service = sourceTopiaApplicationContext.getReplicationService(); -// ReplicationModel model = service.prepareForAll(Entities.REFERENCE_ENTITIES); -// -// try { -// service.doReplicate(model, temporaryTopiaApplicationContext); -// } catch (Exception e) { -// //TODO Avoir une exception concrete -// throw new RuntimeException("Could not replicate referantial", e); -// } -// -// -// if (log.isInfoEnabled()) { -// log.info(String.format("Referential replication done in %s", StringUtil.convertTime(t0, System.nanoTime()))); -// } -// -// } - -// protected void replicateData(ObserveTopiaApplicationContext sourceTopiaApplicationContext, -// ObserveTopiaApplicationContext temporaryTopiaApplicationContext, -// Set<String> ids) { -// try { -// -// -// for (String id : ids) { -// long t1 = System.nanoTime(); -// -// replicateOneData(sourceTopiaApplicationContext, temporaryTopiaApplicationContext, id); -// -// if (log.isInfoEnabled()) { -// log.info(String.format("Data replication [%s] done in %s", id, StringUtil.convertTime(t1, System.nanoTime()))); -// } -// } -// -// } catch (Exception e) { -// throw new RuntimeException("Could not replicate data", e); -// } -// } - protected <D extends DataDto, E extends ObserveDataEntity> D loadEntityToDataDto(Class<D> dtoType, String id) { E entity = loadEntity(dtoType, id); @@ -386,13 +290,13 @@ public abstract class ObserveServiceTopia implements ObserveService { protected <D extends ReferentialDto> ReferentialReference<D> toReference(ObserveReferentialEntity entity) { - return BinderEngine.get().transformEntityToReferentialReferenceDto(getReferentialLocale(), entity); + return BINDER_ENGINE.transformEntityToReferentialReferenceDto(getReferentialLocale(), entity); } protected <D extends DataDto> DataReference<D> toReference(ObserveDataEntity entity) { - return BinderEngine.get().transformEntityToDataReferenceDto(getReferentialLocale(), entity); + return BINDER_ENGINE.transformEntityToDataReferenceDto(getReferentialLocale(), entity); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/LastUpdateDateServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/LastUpdateDateServiceTopia.java new file mode 100644 index 0000000..d6707eb --- /dev/null +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/LastUpdateDateServiceTopia.java @@ -0,0 +1,88 @@ +package fr.ird.observe.services.topia.service; + +import com.google.common.base.Optional; +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.entities.LastUpdateDate; +import fr.ird.observe.entities.ObserveDataEntity; +import fr.ird.observe.entities.ObserveEntity; +import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; +import fr.ird.observe.services.service.LastUpdateDateService; +import fr.ird.observe.services.topia.ObserveServiceTopia; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.support.TopiaSqlQuery; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; + +/** + * Created on 07/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class LastUpdateDateServiceTopia extends ObserveServiceTopia implements LastUpdateDateService { + + /** Logger. */ + private static final Log log = LogFactory.getLog(LastUpdateDateServiceTopia.class); + + @Override + public void updateReferentialLastUpdateDates() { + + for (Class<? extends ObserveReferentialEntity> entityType : BINDER_ENGINE.getReferentialEntityToDtoTypes().keySet()) { + updateLastUpdateDate(entityType); + } + + } + + @Override + public void updateDataLastUpdateDates() { + + for (Class<? extends ObserveDataEntity> entityType : BINDER_ENGINE.getDataEntityToDtoTypes().keySet()) { + updateLastUpdateDate(entityType); + } + } + + private <E extends ObserveEntity> void updateLastUpdateDate(Class<E> entityType) { + + Optional<LastUpdateDate> optionalLastUpdateDate = getTopiaPersistenceContext().getLastUpdateDateDao() + .forTypeEquals(entityType.getName()) + .setOrderByArguments(LastUpdateDate.PROPERTY_LAST_UPDATE_DATE) + .tryFindFirst(); + + if (!optionalLastUpdateDate.isPresent()) { + return; + } + + LastUpdateDate lastUpdateDate = optionalLastUpdateDate.get(); + + ObserveEntityEnum entityEnum = serviceContext.getTopiaApplicationContext().getEntityEnum(entityType); + + String schemaName = entityEnum.dbSchemaName(); + String tableName = entityEnum.dbTableName(); + + + Timestamp maxLastUpdateDate = getTopiaPersistenceContext().getSqlSupport().findSingleResult(new TopiaSqlQuery<Timestamp>() { + @Override + public PreparedStatement prepareQuery(Connection connection) throws SQLException { + + return connection.prepareStatement("SELECT max(lastUpdateDate)::TIMESTAMP FROM " + schemaName + "." + tableName); + } + + @Override + public Timestamp prepareResult(ResultSet set) throws SQLException { + return set.getTimestamp(1); + } + }); + + if (lastUpdateDate.getLastUpdateDate().before(maxLastUpdateDate)) { + + if (log.isInfoEnabled()) { + log.info("Update LastUpdateDate for " + entityType.getName() + " with value: " + maxLastUpdateDate); + } + lastUpdateDate.setLastUpdateDate(maxLastUpdateDate); + } + } +} diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java index e8264f1..f04a9b3 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/ReferentialServiceTopia.java @@ -29,12 +29,6 @@ import fr.ird.observe.entities.EntityMap; import fr.ird.observe.entities.constants.ReferenceStatusPersist; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.entities.referentiel.Species; -import fr.ird.observe.services.service.DataNotFoundException; -import fr.ird.observe.services.service.ReferenceSetsRequest; -import fr.ird.observe.services.service.ReferentialService; -import fr.ird.observe.services.topia.ObserveServiceTopia; -import fr.ird.observe.services.topia.binder.BinderEngine; -import fr.ird.observe.services.topia.binder.referential.ReferentialBinderSupport; import fr.ird.observe.services.dto.DataDto; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.Form; @@ -48,6 +42,11 @@ import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.result.SaveResultDto; +import fr.ird.observe.services.service.DataNotFoundException; +import fr.ird.observe.services.service.ReferenceSetsRequest; +import fr.ird.observe.services.service.ReferentialService; +import fr.ird.observe.services.topia.ObserveServiceTopia; +import fr.ird.observe.services.topia.binder.referential.ReferentialBinderSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaDao; @@ -75,7 +74,7 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe log.trace("getReferenceSet(" + type.getName() + ", " + lastUpdateDate + ")"); } - Class<ObserveReferentialEntity> entityType = BinderEngine.get().getReferentialEntityType(type); + Class<ObserveReferentialEntity> entityType = BINDER_ENGINE.getReferentialEntityType(type); //FIXME A revoir car on devrait toujours avoir une date de dernière mise à jour Optional<Date> lastUpdateOptional = getLastUpdate(entityType); @@ -177,8 +176,6 @@ public class ReferentialServiceTopia extends ObserveServiceTopia implements Refe Class<ObserveReferentialEntity> entityType = getReferentialEntityType(type); ObserveReferentialEntity entity = newEntity(entityType); entity.setStatus(ReferenceStatusPersist.enabled); - //TODO Voir selon le type d'entité si il y a des valeurs par défaut à utiliser - //FIXME Definir une definition pour chaque formulaire de référentiel return referentialEntityToForm(type, entity, null); } diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java index 4c877bf..9fce69b 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java @@ -24,13 +24,15 @@ package fr.ird.observe.services.topia.service.actions.synchro.referential.legacy import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.service.LastUpdateDateService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRequest; +import fr.ird.observe.services.topia.ObserveServiceContextTopia; import fr.ird.observe.services.topia.ObserveServiceTopia; import fr.ird.observe.services.topia.binder.BinderEngine; import fr.ird.observe.services.topia.binder.referential.ReferentialBinderSupport; -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.ApplySqlRequestWork; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.DeleteSqlStatementGenerator; import fr.ird.observe.services.topia.service.actions.synchro.referential.sql.InsertSqlStatementGenerator; @@ -60,6 +62,14 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser /** Logger. */ private static final Log log = LogFactory.getLog(UnidirectionalReferentialSynchronizeLocalServiceTopia.class); + private LastUpdateDateService lastUpdateDateService; + + @Override + public void setServiceContext(ObserveServiceContextTopia serviceContext) { + super.setServiceContext(serviceContext); + lastUpdateDateService = serviceContext.newService(LastUpdateDateService.class); + } + @Override public <R extends ReferentialDto> Set<String> filterIdsUsedInLocalSource(Class<R> referentialName, Set<String> ids) { @@ -157,6 +167,13 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } + @Override + public void updateLastUpdateDates() { + + lastUpdateDateService.updateReferentialLastUpdateDates(); + + } + private <E extends ObserveReferentialEntity> int countUsage0(Class<E> entityType, String id) { TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineEncounterServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineEncounterServiceTopia.java index e2bb448..53fff25 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineEncounterServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineEncounterServiceTopia.java @@ -60,7 +60,8 @@ public class ActivityLongLineEncounterServiceTopia extends ObserveServiceTopia i log.trace("save(" + dto.getId() + ")"); } - ActivityLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); + ActivityLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineSensorUsedServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineSensorUsedServiceTopia.java index c3d003e..dd38dc0 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineSensorUsedServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLongLineSensorUsedServiceTopia.java @@ -78,7 +78,8 @@ public class ActivityLongLineSensorUsedServiceTopia extends ObserveServiceTopia log.trace("save(" + dto.getId() + ")"); } - ActivityLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); + ActivityLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLonglineServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLonglineServiceTopia.java index e2cc905..56e98a1 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLonglineServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/ActivityLonglineServiceTopia.java @@ -176,8 +176,8 @@ public class ActivityLonglineServiceTopia extends ObserveServiceTopia implements TripLongline tripLongline = loadEntity(TripLonglineDto.class, tripLonglineId); - ActivityLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + ActivityLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto saveResultDto = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineCatchServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineCatchServiceTopia.java index 6e7cd4e..bbd933a 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineCatchServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineCatchServiceTopia.java @@ -72,7 +72,8 @@ public class SetLonglineCatchServiceTopia extends ObserveServiceTopia implements } - SetLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); + SetLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineDetailCompositionServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineDetailCompositionServiceTopia.java index bc7309d..c97f87e 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineDetailCompositionServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineDetailCompositionServiceTopia.java @@ -114,8 +114,8 @@ public class SetLonglineDetailCompositionServiceTopia extends ObserveServiceTopi log.trace("save(" + dto.getId() + ")"); } - SetLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + SetLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto result = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineGlobalCompositionServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineGlobalCompositionServiceTopia.java index 1f0d770..6764ba2 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineGlobalCompositionServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineGlobalCompositionServiceTopia.java @@ -59,7 +59,8 @@ public class SetLonglineGlobalCompositionServiceTopia extends ObserveServiceTopi log.trace("save(" + dto.getId() + ")"); } - SetLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); + SetLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineServiceTopia.java index 1daba96..0a50834 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/SetLonglineServiceTopia.java @@ -153,8 +153,8 @@ public class SetLonglineServiceTopia extends ObserveServiceTopia implements SetL ActivityLongline activityLongline = loadEntity(ActivityLonglineDto.class, activityLonglineId); - SetLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + SetLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto result = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TdrServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TdrServiceTopia.java index 5c64ac3..2295d74 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TdrServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TdrServiceTopia.java @@ -90,7 +90,8 @@ public class TdrServiceTopia extends ObserveServiceTopia implements TdrService { log.trace("save(" + dto.getId() + ")"); } - SetLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); + SetLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineGearUseServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineGearUseServiceTopia.java index 3044767..ab0924f 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineGearUseServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineGearUseServiceTopia.java @@ -65,8 +65,8 @@ public class TripLonglineGearUseServiceTopia extends ObserveServiceTopia impleme log.trace("save(" + dto.getId() + ")"); } - TripLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + TripLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineServiceTopia.java index eb534fb..522649c 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/longline/TripLonglineServiceTopia.java @@ -197,8 +197,8 @@ public class TripLonglineServiceTopia extends ObserveServiceTopia implements Tri log.trace("save(" + dto.getId() + ")"); } - TripLongline entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + TripLongline entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto result = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineObservedSystemServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineObservedSystemServiceTopia.java index bdfed08..907dd4e 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineObservedSystemServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineObservedSystemServiceTopia.java @@ -58,7 +58,8 @@ public class ActivitySeineObservedSystemServiceTopia extends ObserveServiceTopia log.trace("save(" + dto.getId() + ")"); } - ActivitySeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); + ActivitySeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineServiceTopia.java index 92713d9..41b6433 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ActivitySeineServiceTopia.java @@ -190,8 +190,8 @@ public class ActivitySeineServiceTopia extends ObserveServiceTopia implements Ac Route route = loadEntity(RouteDto.class, routeId); - ActivitySeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + ActivitySeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto result = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/FloatingObjectServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/FloatingObjectServiceTopia.java index 1ef2824..67aec6c 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/FloatingObjectServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/FloatingObjectServiceTopia.java @@ -126,8 +126,8 @@ public class FloatingObjectServiceTopia extends ObserveServiceTopia implements F ActivitySeine activitySeine = loadEntity(ActivitySeineDto.class, activitySeineId); - FloatingObject entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + FloatingObject entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto result = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/NonTargetCatchServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/NonTargetCatchServiceTopia.java index bc551ae..0f1e71f 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/NonTargetCatchServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/NonTargetCatchServiceTopia.java @@ -100,8 +100,8 @@ public class NonTargetCatchServiceTopia extends ObserveServiceTopia implements N .map(ReferentialReference::getId) .collect(Collectors.toSet()); - SetSeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + SetSeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); // mise a jour de la propriete nonTargetDiscarded sur la calée diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectObservedSpeciesServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectObservedSpeciesServiceTopia.java index 94853e0..2c0c53d 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectObservedSpeciesServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectObservedSpeciesServiceTopia.java @@ -60,7 +60,8 @@ public class ObjectObservedSpeciesServiceTopia extends ObserveServiceTopia imple log.trace("save(" + dto.getId() + ")"); } - FloatingObject entity = loadOrCreateEntityAndCheckLastUpdate(dto); + FloatingObject entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectSchoolEstimateServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectSchoolEstimateServiceTopia.java index 1495c33..d73783a 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectSchoolEstimateServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/ObjectSchoolEstimateServiceTopia.java @@ -61,7 +61,8 @@ public class ObjectSchoolEstimateServiceTopia extends ObserveServiceTopia implem log.trace("save(" + dto.getId() + ")"); } - FloatingObject entity = loadOrCreateEntityAndCheckLastUpdate(dto); + FloatingObject entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/RouteServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/RouteServiceTopia.java index b501bcd..96d9b71 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/RouteServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/RouteServiceTopia.java @@ -220,8 +220,8 @@ public class RouteServiceTopia extends ObserveServiceTopia implements RouteServi oldRouteDate = dto.getDate(); } - Route entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + Route entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto saveResultDto = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SchoolEstimateServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SchoolEstimateServiceTopia.java index c6c7a60..aaf5baa 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SchoolEstimateServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SchoolEstimateServiceTopia.java @@ -61,8 +61,8 @@ public class SchoolEstimateServiceTopia extends ObserveServiceTopia implements S log.trace("save(" + dto.getId() + ")"); } - SetSeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + SetSeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); for (SchoolEstimate schoolEstimate : entity.getSchoolEstimate()) { diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SetSeineServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SetSeineServiceTopia.java index cafc0a9..f26eac5 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SetSeineServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/SetSeineServiceTopia.java @@ -146,8 +146,8 @@ public class SetSeineServiceTopia extends ObserveServiceTopia implements SetSein ActivitySeine activitySeine = loadEntity(ActivitySeineDto.class, activitySeineId); - SetSeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); - + SetSeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); SaveResultDto result = saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TransmittingBuoyOperationServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TransmittingBuoyOperationServiceTopia.java index c887960..03242ee 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TransmittingBuoyOperationServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TransmittingBuoyOperationServiceTopia.java @@ -61,7 +61,8 @@ public class TransmittingBuoyOperationServiceTopia extends ObserveServiceTopia i log.trace("save(" + dto.getId() + ")"); } - FloatingObject entity = loadOrCreateEntityAndCheckLastUpdate(dto); + FloatingObject entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineGearUseServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineGearUseServiceTopia.java index 517715e..6b1b878 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineGearUseServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineGearUseServiceTopia.java @@ -65,7 +65,8 @@ public class TripSeineGearUseServiceTopia extends ObserveServiceTopia implements log.trace("save(" + dto.getId() + ")"); } - TripSeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); + TripSeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); return saveEntity(entity); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineServiceTopia.java index 60bc6e2..5d78fc5 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/seine/TripSeineServiceTopia.java @@ -202,7 +202,8 @@ public class TripSeineServiceTopia extends ObserveServiceTopia implements TripSe log.trace("save(" + dto.getId() + ")"); } - TripSeine entity = loadOrCreateEntityAndCheckLastUpdate(dto); + TripSeine entity = loadOrCreateEntityFromDataDto(dto); + checkLastUpdateDate(entity, dto); copyDataDtoToEntity(dto, entity); diff --git a/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java b/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java index 4a6eae1..065d672 100644 --- a/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java +++ b/services-topia/src/test/java/fr/ird/observe/services/topia/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java @@ -24,15 +24,11 @@ package fr.ird.observe.services.topia.service.actions.synchro; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.entities.Entities; -import fr.ird.observe.services.topia.TopiaTestClassResource; -import fr.ird.observe.services.topia.TopiaTestMethodResource; -import fr.ird.observe.services.topia.binder.BinderEngine; import fr.ird.observe.services.dto.referential.PersonDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.VesselDto; import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; -import fr.ird.observe.services.topia.service.AbstractServiceTopiaTest; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeCallbackResults; @@ -40,6 +36,10 @@ import fr.ird.observe.services.service.actions.synchro.referential.legacy.Unidir import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeEngine; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeResult; +import fr.ird.observe.services.topia.TopiaTestClassResource; +import fr.ird.observe.services.topia.TopiaTestMethodResource; +import fr.ird.observe.services.topia.binder.BinderEngine; +import fr.ird.observe.services.topia.service.AbstractServiceTopiaTest; import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.ObserveTestConfiguration; import fr.ird.observe.test.spi.CopyDatabaseConfiguration; @@ -87,10 +87,10 @@ public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTop @Test public void testSynchronizeFromEmptyDatabase() { - UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(diffsEngine, localService); - UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(); - UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.prepareResult(unidirectionalReferentialSynchronizeContext, null); - referentialSynchronizeEngine.finish(unidirectionalReferentialSynchronizeContext); + UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(diffsEngine); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(localService); + UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.prepareResult(localService, unidirectionalReferentialSynchronizeContext, null); + referentialSynchronizeEngine.finish(localService, unidirectionalReferentialSynchronizeContext); Assert.assertNotNull(result); Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames(); @@ -119,10 +119,10 @@ public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTop @Test public void testSynchronizeWithNochange() { - UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(diffsEngine, localService); - UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(); - UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.prepareResult(unidirectionalReferentialSynchronizeContext, null); - referentialSynchronizeEngine.finish(unidirectionalReferentialSynchronizeContext); + UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(diffsEngine); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(localService); + UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.prepareResult(localService, unidirectionalReferentialSynchronizeContext, null); + referentialSynchronizeEngine.finish(localService, unidirectionalReferentialSynchronizeContext); Assert.assertNotNull(result); Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames(); @@ -150,14 +150,14 @@ public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTop public void testSynchronizeWithAllChanges() { - UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(diffsEngine, localService); - UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(); + UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(diffsEngine); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(localService); UnidirectionalReferentialSynchronizeCallbackResults results = new UnidirectionalReferentialSynchronizeCallbackResults(); results.addCallbackResult(PersonDto.class, "fr.ird.observe.entities.referentiel.Person#1355399844272#0.32586441962131485", "fr.ird.observe.entities.referentiel.Person#1429515754659#0.322074382333085"); - UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.prepareResult(unidirectionalReferentialSynchronizeContext, results); - referentialSynchronizeEngine.finish(unidirectionalReferentialSynchronizeContext); + UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.prepareResult(localService, unidirectionalReferentialSynchronizeContext, results); + referentialSynchronizeEngine.finish(localService, unidirectionalReferentialSynchronizeContext); Assert.assertNotNull(result); Set<Class<? extends ReferentialDto>> referentialNames = result.getReferentialNames(); diff --git a/services/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java b/services/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java index 9ef43c2..1712ad2 100644 --- a/services/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java +++ b/services/src/main/java/fr/ird/observe/services/ObserveServiceInitializer.java @@ -139,7 +139,6 @@ public class ObserveServiceInitializer { /** * Le répertoire où créer les répertoires temporaires. - * FIXME A revoir car dans le cadre d'un appel distant cela n'a pas de sens. */ private File temporaryDirectoryRoot; diff --git a/services/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java b/services/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java index 00b611f..3dd5bfb 100644 --- a/services/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java +++ b/services/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java @@ -23,6 +23,7 @@ package fr.ird.observe.services; */ import fr.ird.observe.services.service.DataSourceService; +import fr.ird.observe.services.service.LastUpdateDateService; import fr.ird.observe.services.service.PingService; import fr.ird.observe.services.service.ReferentialService; import fr.ird.observe.services.service.SqlScriptProducerService; @@ -70,6 +71,8 @@ import fr.ird.observe.services.service.trip.TripManagementService; */ public interface ObserveServicesProvider { + LastUpdateDateService newLastUpdateDateService(); + SqlScriptProducerService newSqlScriptProducerService(); ValidateService newValidateService(); diff --git a/services/src/main/java/fr/ird/observe/services/service/LastUpdateDateService.java b/services/src/main/java/fr/ird/observe/services/service/LastUpdateDateService.java new file mode 100644 index 0000000..82a59dd --- /dev/null +++ b/services/src/main/java/fr/ird/observe/services/service/LastUpdateDateService.java @@ -0,0 +1,16 @@ +package fr.ird.observe.services.service; + +import fr.ird.observe.services.ObserveService; + +/** + * Created on 07/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public interface LastUpdateDateService extends ObserveService { + + void updateReferentialLastUpdateDates(); + + void updateDataLastUpdateDates(); +} diff --git a/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java b/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java index c931899..5f94e4e 100644 --- a/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java +++ b/services/src/main/java/fr/ird/observe/services/service/ReferentialService.java @@ -82,7 +82,6 @@ public interface ReferentialService extends ObserveService { @DeleteRequest <R extends ReferentialDto> void delete(Class<R> type, Collection<String> ids) throws DataNotFoundException; - //FIXME Pfff, on ne veut pas récuperer des dto, mais des références @ReadReferentialPermission @ReadDataPermission <R extends ReferentialDto> ReferenceMap findAllUsages(R bean) throws DataNotFoundException; diff --git a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java index d66adf6..76ab447 100644 --- a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java @@ -26,7 +26,6 @@ import com.google.common.collect.ImmutableSet; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; -import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiff; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffState; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffs; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine; @@ -46,17 +45,13 @@ import java.util.stream.Collectors; */ public class UnidirectionalReferentialSynchronizeEngine { - private final UnidirectionalReferentialSynchronizeLocalService localService; - private final ReferentialSynchronizeDiffsEngine diffsEngine; - public UnidirectionalReferentialSynchronizeEngine(ReferentialSynchronizeDiffsEngine diffsEngine, - UnidirectionalReferentialSynchronizeLocalService localService) { + public UnidirectionalReferentialSynchronizeEngine(ReferentialSynchronizeDiffsEngine diffsEngine) { this.diffsEngine = diffsEngine; - this.localService = localService; } - public UnidirectionalReferentialSynchronizeContext prepareContext() { + public UnidirectionalReferentialSynchronizeContext prepareContext(UnidirectionalReferentialSynchronizeLocalService localService) { ReferentialSynchronizeDiffs synchronizeDiffs = diffsEngine.build(); @@ -67,12 +62,10 @@ public class UnidirectionalReferentialSynchronizeEngine { // Première étape pour construire les builder de requète et calculer au passage les ids à faire remplacer // par l'utilisateur - ReferentialSynchronizeDiff localDiff = synchronizeDiffs.getLeftDiff(); - ReferentialSynchronizeDiff centralDiff = synchronizeDiffs.getRightDiff(); - for (Class<? extends ReferentialDto> referentialName : synchronizeDiffs.getReferentialNames()) { UnidirectionalReferentialSynchronizeRequest.Builder<?> builder = computeReferentialSynchronizeRequestBuilder( + localService, referentialName, synchronizeDiffs, callbackRequests); referentialSynchronizeRequestBuilders.add(builder); @@ -86,10 +79,14 @@ public class UnidirectionalReferentialSynchronizeEngine { } - public UnidirectionalReferentialSynchronizeResult prepareResult(UnidirectionalReferentialSynchronizeContext context, UnidirectionalReferentialSynchronizeCallbackResults callbackResults) { + public UnidirectionalReferentialSynchronizeResult prepareResult(UnidirectionalReferentialSynchronizeLocalService localService,UnidirectionalReferentialSynchronizeContext context, UnidirectionalReferentialSynchronizeCallbackResults callbackResults) { UnidirectionalReferentialSynchronizeResult result = new UnidirectionalReferentialSynchronizeResult(); + Set<String> insertSqlRequests = new LinkedHashSet<>(); + Set<String> updateSqlRequests = new LinkedHashSet<>(); + Set<String> deleteSqlRequests = new LinkedHashSet<>(); + Set<String> sqlRequests = new LinkedHashSet<>(); // Second étape pour terminer la construction des builders de requètes et générer le code sql @@ -119,9 +116,21 @@ public class UnidirectionalReferentialSynchronizeEngine { result.flushRequest(referentialSynchronizeRequest); Set<String> sqlRequestsforReferential = localService.generateSqlRequests(referentialSynchronizeRequest); - sqlRequests.addAll(sqlRequestsforReferential); + for (String sqlStatement : sqlRequestsforReferential) { + + if (sqlStatement.startsWith("INSERT")) { + insertSqlRequests.add(sqlStatement); + }if (sqlStatement.startsWith("UPDATE")) { + updateSqlRequests.add(sqlStatement); + } else { + deleteSqlRequests.add(sqlStatement); + } + } } + sqlRequests.addAll(insertSqlRequests); + sqlRequests.addAll(updateSqlRequests); + sqlRequests.addAll(deleteSqlRequests); context.setSqlRequests(sqlRequests); @@ -129,16 +138,16 @@ public class UnidirectionalReferentialSynchronizeEngine { } - public void finish(UnidirectionalReferentialSynchronizeContext context) { + public void finish(UnidirectionalReferentialSynchronizeLocalService localService, UnidirectionalReferentialSynchronizeContext context) { Set<String> sqlRequests = context.getSqlRequests(); localService.applySqlRequests(sqlRequests); - //FIXME Mettre à jour la table LastUpdateDate pour les référentiels touchés et les données aussi... - + localService.updateLastUpdateDates(); } - private <R extends ReferentialDto> UnidirectionalReferentialSynchronizeRequest.Builder<R> computeReferentialSynchronizeRequestBuilder(Class<R> referentialName, + private <R extends ReferentialDto> UnidirectionalReferentialSynchronizeRequest.Builder<R> computeReferentialSynchronizeRequestBuilder(UnidirectionalReferentialSynchronizeLocalService localService, + Class<R> referentialName, ReferentialSynchronizeDiffs diffs, UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests) { diff --git a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java index b974b5f..48054a9 100644 --- a/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java +++ b/services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java @@ -85,4 +85,9 @@ public interface UnidirectionalReferentialSynchronizeLocalService extends Observ @Write @PostRequest void applySqlRequests(Set<String> sqlRequests); + + @ReadReferentialPermission + @Write + @PostRequest + void updateLastUpdateDates(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.