Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 35a7ad77 by Tony Chemit at 2021-03-14T11:13:52+01:00 Introduce PersistenceResult to perform better save in services - See ird-observe-toolkit#24 See #1801 - - - - - 21 changed files: - models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripImpl.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ContainerDataServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/EditableDataServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/OpenableDataServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/SimpleDataServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/TripServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/common/TripServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/landing/LandingServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/ActivitySampleServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/ActivityServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/SampleServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/SetServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/ActivityServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/BranchlineServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/SetServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/ActivityServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/FloatingObjectServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/RouteServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/SampleDataServiceLocalSupport.java - services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/SetServiceLocalSupport.java Changes: ===================================== models/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripImpl.java ===================================== @@ -26,6 +26,8 @@ import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.dto.data.ll.common.TripDto; import fr.ird.observe.dto.referential.ReferentialLocale; import io.ultreia.java4all.util.Dates; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.Date; @@ -36,9 +38,39 @@ import java.util.Date; * @since 3.7 */ public class TripImpl extends TripAbstract { - + private static final Logger log = LogManager.getLogger(TripImpl.class); private static final long serialVersionUID = 1L; + @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; + } + + @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; + } + @Override public <D extends DataDto> void toDto(ReferentialLocale referentialLocale, D dto) { super.toDto(referentialLocale, dto); ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java ===================================== @@ -42,6 +42,7 @@ import fr.ird.observe.entities.ObserveTopiaApplicationContext; import fr.ird.observe.entities.ObserveTopiaApplicationContextFactory; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.PersistenceResult; +import fr.ird.observe.entities.ReplicateDataEngine; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.referential.ReferentialEntity; import fr.ird.observe.security.Permission; @@ -160,23 +161,6 @@ public abstract class ObserveServiceLocal implements ObserveService { return persistenceContext; } - protected ObserveTopiaPersistenceContext initTransaction() { - if (serviceContext.getTopiaApplicationContext() == null) { - ObserveTopiaApplicationContext topiaApplicationContext; - ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration; - ObserveServiceInitializer initializer = serviceContext.getServiceInitializer(); - if (initializer.withConnection()) { - String authenticationToken = initializer.getConnection().getAuthenticationToken(); - topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(authenticationToken); - } else { - dataSourceConfiguration = (ObserveDataSourceConfigurationTopiaSupport) initializer.getConfiguration(); - topiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(dataSourceConfiguration); - } - serviceContext.setTopiaApplicationContext(topiaApplicationContext); - } - return serviceContext.getTopiaPersistenceContext(); - } - protected void checkCredentials(String methodName, Permission methodeCredentials) { if (methodeCredentials != null && serviceContext.getServiceInitializer().withConnection()) { ObserveDataSourceConnectionTopia dataSourceConnection = (ObserveDataSourceConnectionTopia) serviceContext.getServiceInitializer().getConnection(); @@ -190,75 +174,16 @@ public abstract class ObserveServiceLocal implements ObserveService { return PersistenceResult.create(getTopiaPersistenceContext(), this::now); } + protected ReplicateDataEngine newReplicateDataEngine() { + return serviceContext.getTopiaApplicationContext().newReplicateDataEngine(getTopiaPersistenceContext()); + } + protected <E extends Entity> SaveResultDto saveEntity(DtoEntityContext<?, ?, E, ?> spi, E entity) { return newSaveHelper() .update(spi, entity) - .updateLastUpdateDateField(spi, entity) - .updateLastUpdateDateTable(spi) .build(entity); -// entity = spi.update(getTopiaPersistenceContext(), entity); -// getTopiaPersistenceContext().flush(); -// Date lastUpdateDate = now(); -// spi.updateLastUpdateDateField(getTopiaPersistenceContext(), entity.getTopiaId(), lastUpdateDate); -// spi.updateLastUpdateDateTable(getTopiaPersistenceContext(), lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); } -// protected <E extends Entity> SaveResultDto saveEntity(DataDtoEntityContext<?, ?, ?, ?> parentSpi, DataDtoEntityContext spi, E entity) { -// spi.update(getTopiaPersistenceContext(), entity); -// getTopiaPersistenceContext().flush(); -// Date lastUpdateDate = now(); -// parentSpi.updateLastUpdateDateField(getTopiaPersistenceContext(), entity.getTopiaId(), lastUpdateDate); -// spi.updateLastUpdateDateTable(getTopiaPersistenceContext(), lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } - -// protected <E extends Entity> SaveResultDto saveEntity(DataDtoEntityContext<?, ?, ?, ?> parentSpi, DataDtoEntityContext spi, E entity, BiConsumer<E, Date> children) { -// spi.update(getTopiaPersistenceContext(), entity); -// getTopiaPersistenceContext().flush(); -// Date lastUpdateDate = now(); -// children.accept(entity, lastUpdateDate); -// parentSpi.updateLastUpdateDateField(getTopiaPersistenceContext(), entity.getTopiaId(), lastUpdateDate); -// spi.updateLastUpdateDateTable(getTopiaPersistenceContext(), lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } - -// protected <E extends DataEntity> SaveResultDto saveEntity(DataDtoEntityContext<?, ?, E, ?> parentSpi, E entity, BiConsumer<E, Date> children) { -// parentSpi.update(getTopiaPersistenceContext(), entity); -// getTopiaPersistenceContext().flush(); -// Date lastUpdateDate = now(); -// children.accept(entity, lastUpdateDate); -// parentSpi.updateLastUpdateDateField(getTopiaPersistenceContext(), entity.getTopiaId(), lastUpdateDate); -// parentSpi.updateLastUpdateDateTable(getTopiaPersistenceContext(), lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } - -// protected <P extends DataEntity<?, ?>, E extends DataEntity<?, ?>> SaveResultDto saveEntity(DataDtoEntityContext<?, ?, P, ?> parentSpi, P parenEntity, E entity) { -// Date lastUpdateDate = now(); -// ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); -// persistenceContext.flush(); -// parentSpi.updateLastUpdateDateField(persistenceContext, parenEntity.getTopiaId(), lastUpdateDate); -// parentSpi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } - -// protected <P extends DataEntity<?, ?>, E extends DataEntity<?, ?>> SaveResultDto saveEntity(DataDtoEntityContext<?, ?, P, ?> parentSpi, DataDtoEntityContext<?, ?, E, ?> spi, P parenEntity, E entity) { -// spi.update(getTopiaPersistenceContext(), entity); -// Date lastUpdateDate = now(); -// ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); -// persistenceContext.flush(); -// parentSpi.updateLastUpdateDateField(persistenceContext, parenEntity.getTopiaId(), lastUpdateDate); -// spi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } - -// protected <E extends Entity> SaveResultDto toSaveResult(E entity, Date lastUpdateDate) { -// SaveResultDto result = new SaveResultDto(); -// EntityHelper.toDto(entity, result); -// result.setLastUpdateDate(lastUpdateDate); -// return result; -// } - protected <E extends Entity> void checkLastUpdateDate(E entity, IdDto dto) { if (entity.isPersisted()) { Date lastUpdateDate = entity.getLastUpdateDate(); @@ -313,14 +238,14 @@ public abstract class ObserveServiceLocal implements ObserveService { return ReferentialDtoReferenceSet.of(spi.toReferenceType(), references.build(), lastUpdate); } - protected void deleteSingleAssociation(String idToDelete, - DataDtoEntityContext<?, ?, ?, ?> spi, - DtoEntityContext<?, ?, ?, ?> parentSpi, - String associationName) { + protected <E extends DataEntity<?, ?>, PE extends Entity> void deleteSingleAssociation(String idToDelete, + DataDtoEntityContext<?, ?, E, ?> spi, + DtoEntityContext<?, ?, PE, ?> parentSpi, + String associationName) { - DataEntity<?, ?> entityToDelete = spi.loadEntity(getApplicationLocale(), getTopiaPersistenceContext(), idToDelete); - Entity parentEntity = getTopiaPersistenceContext().getSingleAssociationParent(getApplicationLocale(), parentSpi.toEntityType(), associationName, idToDelete); - Object realChild = parentEntity.get(associationName); + E entityToDelete = spi.loadEntity(getApplicationLocale(), getTopiaPersistenceContext(), idToDelete); + PE parentEntity = getTopiaPersistenceContext().getSingleAssociationParent(getApplicationLocale(), parentSpi.toEntityType(), associationName, idToDelete); + E realChild = parentEntity.get(associationName); if (!Objects.equals(entityToDelete, realChild)) { throw new DataNotFoundException(getApplicationLocale(), spi.toDtoType(), idToDelete); } @@ -328,10 +253,10 @@ public abstract class ObserveServiceLocal implements ObserveService { afterDeleteAssociationEntity(parentSpi, spi, parentEntity); } - protected <E extends Entity> void deleteMultipleAssociation(DtoEntityContext<?, ?, E, ?> parentSpi, String associationName, DataDtoEntityContext<?, ?, ?, ?> spi, String idToDelete) { + protected <E extends DataEntity<?, ?>, PE extends Entity> void deleteMultipleAssociation(DtoEntityContext<?, ?, PE, ?> parentSpi, String associationName, DataDtoEntityContext<?, ?, E, ?> spi, String idToDelete) { - DataEntity<?, ?> entityToDelete = spi.loadEntity(getApplicationLocale(), getTopiaPersistenceContext(), idToDelete); - E parentEntity = getTopiaPersistenceContext().getMultipleAssociationParent(getApplicationLocale(), parentSpi.toEntityType(), associationName, idToDelete); + E entityToDelete = spi.loadEntity(getApplicationLocale(), getTopiaPersistenceContext(), idToDelete); + PE parentEntity = getTopiaPersistenceContext().getMultipleAssociationParent(getApplicationLocale(), parentSpi.toEntityType(), associationName, idToDelete); Collection<?> realChild = parentEntity.get(associationName); if (!realChild.contains(entityToDelete)) { throw new DataNotFoundException(getApplicationLocale(), spi.toDtoType(), idToDelete); @@ -354,11 +279,11 @@ public abstract class ObserveServiceLocal implements ObserveService { return spi.toReferenceSet(referentialLocale, parents.stream(), id, now()); } - private <E extends Entity> void afterDeleteAssociationEntity(DtoEntityContext<?, ?, ?, ?> parentSpi, DataDtoEntityContext<?, ?, ?, ?> spi, E parentEntity) { - Date lastUpdateDate = now(); - getTopiaPersistenceContext().flush(); - parentSpi.updateLastUpdateDateField(getTopiaPersistenceContext(), parentEntity.getTopiaId(), lastUpdateDate); - spi.updateLastUpdateDateTable(getTopiaPersistenceContext(), lastUpdateDate); + private <E extends DataEntity<?, ?>, PE extends Entity> void afterDeleteAssociationEntity(DtoEntityContext<?, ?, PE, ?> parentSpi, DataDtoEntityContext<?, ?, E, ?> spi, PE parentEntity) { + newSaveHelper() + .updateLastUpdateDateField(parentSpi, parentEntity) + .updateLastUpdateDateTable(spi) + .build(); } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ContainerDataServiceLocalSupport.java ===================================== @@ -71,8 +71,7 @@ public class ContainerDataServiceLocalSupport<PE extends DataEntity<?, ?>, D ext checkLastUpdateDate(entity, dto); entity.fromDto(getReferentialLocale(), dto); return newSaveHelper() - .update(parentSpi, entity, saveCallback) - .updateLastUpdateDateField(parentSpi, entity) + .update(parentSpi, entity, saveCallback, true, false) .updateLastUpdateDateTable(spi) .build(entity); // if (saveCallback == null) { ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/EditableDataServiceLocalSupport.java ===================================== @@ -45,7 +45,7 @@ import java.util.stream.Stream; * @author Tony Chemit - dev@tchemit.fr * @since 8.0.1 */ -public abstract class EditableDataServiceLocalSupport<PE extends Entity, D extends EditableDto, R extends DataDtoReference, E extends DataEntity<?, ?>, T extends TopiaDao<E>, S extends SaveResultDto> extends ObserveServiceLocal implements EditableDataService<D, R> { +public abstract class EditableDataServiceLocalSupport<PE extends Entity, D extends EditableDto, R extends DataDtoReference, E extends DataEntity<?, ?>, T extends TopiaDao<E>> extends ObserveServiceLocal implements EditableDataService<D, R> { protected final DataDtoEntityContext<D, R, E, T> spi; protected final DtoEntityContext<?, ?, PE, ?> parentSpi; @@ -159,17 +159,4 @@ public abstract class EditableDataServiceLocalSupport<PE extends Entity, D exten return getSingleAssociationParent(parentSpi, propertyName, id); } -// protected SaveResultDto saveEntity(E entity) { -// return saveEntity(spi, entity); -// } - -// protected SaveResultDto saveEntity(PE parenEntity, E entity) { -// spi.update(getTopiaPersistenceContext(), entity); -// ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); -// persistenceContext.flush(); -// Date lastUpdateDate = now(); -// parentSpi.updateLastUpdateDateField(persistenceContext, parenEntity.getTopiaId(), lastUpdateDate); -// spi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/OpenableDataServiceLocalSupport.java ===================================== @@ -31,7 +31,6 @@ import fr.ird.observe.dto.reference.DataDtoReferenceSet; import fr.ird.observe.dto.reference.UpdatedDataDtoReferenceSet; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.entities.Entity; -import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.PersistenceResult; import fr.ird.observe.entities.ReplicateDataEngine; import fr.ird.observe.entities.data.DataEntity; @@ -148,8 +147,7 @@ public abstract class OpenableDataServiceLocalSupport<PE extends Entity, D exten Collection<E> oldCollection = getChildren0(oldParent); Collection<E> newCollection = getChildren0(newParent); List<E> moved = new LinkedList<>(); - ObserveTopiaPersistenceContext topiaPersistenceContext = getTopiaPersistenceContext(); - ReplicateDataEngine replicateEngine = serviceContext.getTopiaApplicationContext().newReplicateDataEngine(topiaPersistenceContext); + ReplicateDataEngine replicateEngine = newReplicateDataEngine(); for (String id : ids) { E entity = loadEntity(id); @@ -282,28 +280,4 @@ public abstract class OpenableDataServiceLocalSupport<PE extends Entity, D exten protected PE getParent(String id) { return getParent(parentSpi, propertyName, id); } - -// protected SaveResultDto saveEntity(E entity) { -// return saveEntity(spi, entity); -// } - -// protected void saveParentEntity(PE oldParent, PE newParent, Collection<String> ids) { -// ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); -// persistenceContext.flush(); -// Date lastUpdateDate = now(); -// parentSpi.updateLastUpdateDateField(persistenceContext, oldParent.getTopiaId(), lastUpdateDate); -// parentSpi.updateLastUpdateDateField(persistenceContext, newParent.getTopiaId(), lastUpdateDate); -// ids.forEach(id -> spi.updateLastUpdateDateField(persistenceContext, id, lastUpdateDate)); -// spi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); -// } - -// protected SaveResultDto saveEntity(PE parenEntity, E entity) { -// spi.update(getTopiaPersistenceContext(), entity); -// ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); -// persistenceContext.flush(); -// Date lastUpdateDate = now(); -// parentSpi.updateLastUpdateDateField(persistenceContext, parenEntity.getTopiaId(), lastUpdateDate); -// spi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); -// return toSaveResult(entity, lastUpdateDate); -// } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/SimpleDataServiceLocalSupport.java ===================================== @@ -64,8 +64,7 @@ public class SimpleDataServiceLocalSupport<PE extends DataEntity<?, ?>, M extend checkLastUpdateDate(entity, dto); entity.fromDto(getReferentialLocale(), dto); return newSaveHelper() - .update(parentSpi, entity, saveCallback) - .updateLastUpdateDateField(parentSpi, entity) + .update(parentSpi, entity, saveCallback, true, false) .updateLastUpdateDateTable(spi) .build(entity); // if (saveCallback == null) { ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/TripServiceLocalSupport.java ===================================== @@ -164,7 +164,7 @@ public abstract class TripServiceLocalSupport<D extends OpenableDto & fr.ird.obs saveHelper.updateLastUpdateDateField(spi, entity); // saveEntity(spi, entity); } - saveHelper.build(); + saveHelper.updateLastUpdateDateTable(spi).build(); return ids; } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/common/TripServiceLocalSupport.java ===================================== @@ -28,45 +28,12 @@ import fr.ird.observe.entities.data.ll.common.Trip; import fr.ird.observe.entities.data.ll.common.TripTopiaDao; import fr.ird.observe.entities.referential.common.Program; import fr.ird.observe.services.service.data.ll.common.TripService; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** * @author Tony Chemit - dev@tchemit.fr */ public class TripServiceLocalSupport extends fr.ird.observe.services.local.service.data.TripServiceLocalSupport<TripDto, TripReference, Trip, TripTopiaDao> implements TripService { - private static final Logger log = LogManager.getLogger(TripServiceLocalSupport.class); - - 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; - } - - @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 TripServiceLocalSupport() { super(Program.SPI, Trip.SPI, Trip.PROPERTY_PROGRAM); } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/landing/LandingServiceLocalSupport.java ===================================== @@ -44,18 +44,4 @@ class LandingServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, L preCreated.setStartDate(parent.getEndDate()); } -// @Override -// protected SaveResultDto onSave(Trip parent, Landing entity, LandingDto dto) { -// if (dto.isNotPersisted()) { -// parent.addLanding(entity); -// } -// parent.updateEndDate(); -// //FIXME Check this is ok to not do this -// return newSaveHelper() -// .update(spi, entity) -// .updateLastUpdateDateField(parentSpi, parent) -// .updateLastUpdateDateTable(spi) -// .build(entity); -// } - } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/ActivitySampleServiceLocalSupport.java ===================================== @@ -31,27 +31,23 @@ import fr.ird.observe.dto.reference.DataDtoReferenceSet; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.entities.DataNotFoundException; import fr.ird.observe.entities.Entity; -import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.ReplicateDataEngine; -import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.TripAware; import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripImpl; import fr.ird.observe.entities.data.ll.logbook.Activity; import fr.ird.observe.entities.data.ll.logbook.Sample; import fr.ird.observe.entities.data.ll.logbook.SampleTopiaDao; import fr.ird.observe.entities.referential.common.Program; import fr.ird.observe.services.local.service.data.EditableDataServiceLocalSupport; -import fr.ird.observe.services.local.service.data.ll.common.TripServiceLocalSupport; import fr.ird.observe.services.service.data.ll.logbook.ActivitySampleService; -import fr.ird.observe.spi.context.DataDtoEntityContext; -import java.util.Date; import java.util.stream.Stream; /** * @author Tony Chemit - dev@tchemit.fr */ -class ActivitySampleServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, ActivitySampleDto, ActivitySampleReference, Sample, SampleTopiaDao, SaveResultDto> implements ActivitySampleService { +class ActivitySampleServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, ActivitySampleDto, ActivitySampleReference, Sample, SampleTopiaDao> implements ActivitySampleService { public ActivitySampleServiceLocalSupport() { super(Activity.SPI, Sample.ACTIVITY_SAMPLE_SPI, Activity.PROPERTY_SAMPLE); @@ -74,13 +70,11 @@ class ActivitySampleServiceLocalSupport extends EditableDataServiceLocalSupport< @Override protected SaveResultDto onSave(Activity parent, Sample entity, ActivitySampleDto dto) { parent.setSample(entity); - //FIXME Why we are using this ??? + // As the sample is mainly associated to trip, updating only entity won't update the activity and his ancestor return newSaveHelper() - .update(spi, entity) + .update(spi, entity, false, true) .updateLastUpdateDateField(parentSpi, parent) - .updateLastUpdateDateTable(spi) .build(entity); -// return saveEntity(parent, entity); } @Override @@ -92,7 +86,7 @@ class ActivitySampleServiceLocalSupport extends EditableDataServiceLocalSupport< if (!sampleLogbookId.equals(sample.getTopiaId())) { throw new DataNotFoundException(getApplicationLocale(), ActivitySampleDto.class, sampleLogbookId); } - ReplicateDataEngine replicateEngine = serviceContext.getTopiaApplicationContext().newReplicateDataEngine(getTopiaPersistenceContext()); + ReplicateDataEngine replicateEngine = newReplicateDataEngine(); Sample replicateData = replicateEngine.replicate(sample); if (newParent instanceof Activity) { replicateEngine.flush(Sample.class); @@ -105,7 +99,11 @@ class ActivitySampleServiceLocalSupport extends EditableDataServiceLocalSupport< private ImmutableSet<String> moveToActivity(Activity oldActivity, Activity newActivity, Sample sample) { oldActivity.setSample(null); newActivity.setSample(sample); - saveEntity2(Activity.SPI, Activity.SPI, oldActivity, newActivity); + newSaveHelper() + .update(Activity.SPI, oldActivity) + .update(Activity.SPI, newActivity, (activity, date) -> activity.getSample().setLastUpdateDate(date)) + .updateLastUpdateDateTable(spi) + .build(); return ImmutableSet.of(sample.getTopiaId()); } @@ -113,24 +111,15 @@ class ActivitySampleServiceLocalSupport extends EditableDataServiceLocalSupport< Trip oldTrip = getParent(Trip.SPI, Trip.PROPERTY_ACTIVITY_LOGBOOK, oldActivity.getTopiaId()); oldActivity.setSample(null); newTrip.addSample(sample); - TripServiceLocalSupport.copyTripLogbookMetaData(oldTrip, newTrip); - saveEntity2(Trip.SPI, Activity.SPI, newTrip, oldActivity); + TripImpl.copyTripLogbookMetaData(oldTrip, newTrip); + newSaveHelper() + .update(Activity.SPI, oldActivity) + .update(spi, sample) + .build(); return ImmutableSet.of(sample.getTopiaId()); } protected Stream<Trip> getTrips(Program program) { return Trip.getDao(getTopiaPersistenceContext()).forEquals(TripAware.PROPERTY_PROGRAM, program).stream(); } - - protected <P extends DataEntity<?, ?>, E extends DataEntity<?, ?>> void saveEntity2(DataDtoEntityContext<?, ?, P, ?> parentSpi, DataDtoEntityContext<?, ?, E, ?> spi, P parenEntity, E entity) { - parentSpi.update(getTopiaPersistenceContext(), parenEntity); - spi.update(getTopiaPersistenceContext(), entity); - Date lastUpdateDate = now(); - ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); - persistenceContext.flush(); - spi.updateLastUpdateDateField(persistenceContext, entity.getTopiaId(), lastUpdateDate); - spi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); - parentSpi.updateLastUpdateDateField(persistenceContext, parenEntity.getTopiaId(), lastUpdateDate); - parentSpi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); - } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/ActivityServiceLocalSupport.java ===================================== @@ -28,13 +28,13 @@ import fr.ird.observe.dto.data.ll.logbook.ActivityDto; import fr.ird.observe.dto.data.ll.logbook.ActivityReference; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripImpl; import fr.ird.observe.entities.data.ll.logbook.Activity; import fr.ird.observe.entities.data.ll.logbook.ActivityTopiaDao; import fr.ird.observe.entities.data.ll.logbook.Sample; import fr.ird.observe.entities.data.ll.logbook.Set; import fr.ird.observe.entities.referential.common.DataQuality; import fr.ird.observe.services.local.service.data.OpenableDataServiceLocalSupport; -import fr.ird.observe.services.local.service.data.ll.common.TripServiceLocalSupport; import fr.ird.observe.services.service.data.ll.logbook.ActivityService; import io.ultreia.java4all.util.Dates; @@ -70,15 +70,6 @@ class ActivityServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, preCreated.setDataQuality(defaultDataQuality); } -// @Override -// protected SaveResultDto onSave(Trip parent, Activity entity, ActivityDto dto) { -// if (dto.isNotPersisted()) { -// parent.addActivityLogbook(entity); -// } -// parent.updateEndDate(); -// return saveEntity(entity); -// } - @SuppressWarnings("unchecked") @Override protected Class<? extends DataEntity<?, ?>>[] getEntityTypeToCreateOnReplicate() { @@ -87,7 +78,7 @@ class ActivityServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, @Override protected void moveCallback(Trip oldParent, Trip newParent, List<Activity> moved) { - TripServiceLocalSupport.copyTripLogbookMetaData(oldParent, newParent); + TripImpl.copyTripLogbookMetaData(oldParent, newParent); } @Override ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/SampleServiceLocalSupport.java ===================================== @@ -28,17 +28,14 @@ import fr.ird.observe.dto.ShortIdDto; import fr.ird.observe.dto.data.TripAware; import fr.ird.observe.dto.data.ll.logbook.SampleDto; import fr.ird.observe.dto.data.ll.logbook.SampleReference; -import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.ReplicateDataEngine; -import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripImpl; import fr.ird.observe.entities.data.ll.logbook.Activity; import fr.ird.observe.entities.data.ll.logbook.Sample; import fr.ird.observe.entities.data.ll.logbook.SampleTopiaDao; import fr.ird.observe.services.local.service.data.OpenableDataServiceLocalSupport; -import fr.ird.observe.services.local.service.data.ll.common.TripServiceLocalSupport; import fr.ird.observe.services.service.data.ll.logbook.SampleService; -import fr.ird.observe.spi.context.DataDtoEntityContext; import java.util.Calendar; import java.util.Date; @@ -68,20 +65,6 @@ class SampleServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, Sa preCreated.setTimeStamp(timestamp); } -// @Override -// protected SaveResultDto onSave(Trip parent, Sample entity, SampleDto dto) { -// if (dto.isNotPersisted()) { -// parent.addSample(entity); -// } -// parent.updateEndDate(); -// //FIXME Check this is ok to not do this -// return newSaveHelper() -// .update(spi, entity) -// .updateLastUpdateDateField(parentSpi, parent) -// .updateLastUpdateDateTable(spi) -// .build(entity); -// } - @Override public ImmutableSet<String> move(ShortIdDto oldParentId, ShortIdDto newParentId, ImmutableSet<String> ids) { if (TripAware.class.isAssignableFrom(newParentId.getType())) { @@ -98,30 +81,18 @@ class SampleServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, Sa String id = ids.iterator().next(); Sample entity = loadEntity(id); Trip newTrip = getParent(Trip.SPI, Trip.PROPERTY_ACTIVITY_LOGBOOK, newParent.getTopiaId()); - ReplicateDataEngine replicateEngine = serviceContext.getTopiaApplicationContext().newReplicateDataEngine(getTopiaPersistenceContext()); + ReplicateDataEngine replicateEngine = newReplicateDataEngine(); Sample replicateData = replicateEngine.replicate(entity); - oldParent.removeSample(entity); replicateEngine.flush(Sample.class); newParent.setSample(replicateData); - boolean newTripUpdated = TripServiceLocalSupport.copyTripLogbookMetaData(oldParent, newTrip); - Date lastUpdateDate = saveEntity2(Trip.SPI, Activity.SPI, oldParent, newParent); - if (newTripUpdated) { - parentSpi.updateLastUpdateDateField(getTopiaPersistenceContext(), newParent.getTopiaId(), lastUpdateDate); - } + TripImpl.copyTripLogbookMetaData(oldParent, newTrip); + newSaveHelper() + .update(parentSpi, oldParent) + .update(Activity.SPI, newParent,(activity, date) -> activity.getSample().setLastUpdateDate(date)) + .updateLastUpdateDateTable(spi) + .build(); return ImmutableSet.of(replicateData.getTopiaId()); } - protected <P extends DataEntity<?, ?>, E extends DataEntity<?, ?>> Date saveEntity2(DataDtoEntityContext<?, ?, P, ?> parentSpi, DataDtoEntityContext<?, ?, E, ?> spi, P parenEntity, E entity) { - parentSpi.update(getTopiaPersistenceContext(), parenEntity); - spi.update(getTopiaPersistenceContext(), entity); - Date lastUpdateDate = now(); - ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); - persistenceContext.flush(); - spi.updateLastUpdateDateField(persistenceContext, entity.getTopiaId(), lastUpdateDate); - spi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); - parentSpi.updateLastUpdateDateField(persistenceContext, parenEntity.getTopiaId(), lastUpdateDate); - parentSpi.updateLastUpdateDateTable(persistenceContext, lastUpdateDate); - return lastUpdateDate; - } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/logbook/SetServiceLocalSupport.java ===================================== @@ -45,7 +45,7 @@ import java.util.Objects; /** * @author Tony Chemit - dev@tchemit.fr */ -class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, SetDto, SetReference, Set, SetTopiaDao, SaveResultDto> implements SetService { +class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, SetDto, SetReference, Set, SetTopiaDao> implements SetService { public SetServiceLocalSupport() { super(Activity.SPI, Set.SPI, Activity.PROPERTY_SET); @@ -83,14 +83,6 @@ class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, S preCreated.setTotalSectionsCount(1); } -// @Override -// protected SaveResultDto onSave(Activity parent, Set entity, SetDto dto) { -// if (dto.isNotPersisted()) { -// parent.setSet(entity); -// } -// return saveEntity(entity); -// } - @Override public SaveResultDto saveAndCopyProperties(String setToCopyId, SetDto dto) { Activity parent = getParent(setToCopyId); ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/ActivityServiceLocalSupport.java ===================================== @@ -27,6 +27,7 @@ import fr.ird.observe.dto.data.ll.observation.ActivityDto; import fr.ird.observe.dto.data.ll.observation.ActivityReference; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.ll.common.Trip; +import fr.ird.observe.entities.data.ll.common.TripImpl; import fr.ird.observe.entities.data.ll.observation.Activity; import fr.ird.observe.entities.data.ll.observation.ActivityTopiaDao; import fr.ird.observe.entities.data.ll.observation.Basket; @@ -34,7 +35,6 @@ import fr.ird.observe.entities.data.ll.observation.Branchline; import fr.ird.observe.entities.data.ll.observation.Section; import fr.ird.observe.entities.data.ll.observation.Set; import fr.ird.observe.services.local.service.data.OpenableDataServiceLocalSupport; -import fr.ird.observe.services.local.service.data.ll.common.TripServiceLocalSupport; import fr.ird.observe.services.service.data.ll.observation.ActivityService; import java.util.Calendar; @@ -67,30 +67,12 @@ class ActivityServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, preCreated.setTimeStamp(timestamp); } -// @Override -// protected SaveResultDto onSave(Trip parent, Activity entity, ActivityDto dto) { -// if (dto.isNotPersisted()) { -// parent.addActivityObs(entity); -// } -// parent.updateEndDate(); -// return saveEntity(entity); -// } - + @SuppressWarnings("unchecked") @Override protected Class<? extends DataEntity<?, ?>>[] getEntityTypeToCreateOnReplicate() { return new Class[]{Set.class, Section.class, Basket.class, Branchline.class}; } - @Override - protected void moveCallback(Trip oldParent, Trip newParent, List<Activity> moved) { - TripServiceLocalSupport.copyTripObservationMetaData(Objects.requireNonNull(oldParent), newParent); -// for (fr.ird.observe.entities.data.ll.logbook.Activity activity : oldParent.getActivityLogbook()) { -// if (activity.getRelatedObservedActivity() != null && moved.contains(activity.getRelatedObservedActivity())) { -// activity.setRelatedObservedActivity(null); -// } -// } - } - @Override protected void moveCallback(Trip oldParent, Trip newParent, Activity moved) { for (fr.ird.observe.entities.data.ll.logbook.Activity activity : oldParent.getActivityLogbook()) { @@ -99,4 +81,9 @@ class ActivityServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, } } } + + @Override + protected void moveCallback(Trip oldParent, Trip newParent, List<Activity> moved) { + TripImpl.copyTripObservationMetaData(Objects.requireNonNull(oldParent), newParent); + } } ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/BranchlineServiceLocalSupport.java ===================================== @@ -25,6 +25,7 @@ package fr.ird.observe.services.local.service.data.ll.observation; import fr.ird.observe.dto.data.ll.observation.BranchlineDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.result.SaveResultDto; +import fr.ird.observe.entities.Entity; import fr.ird.observe.entities.data.ll.observation.Basket; import fr.ird.observe.entities.data.ll.observation.Branchline; import fr.ird.observe.entities.data.ll.observation.Section; @@ -50,11 +51,9 @@ class BranchlineServiceLocalSupport extends ObserveServiceLocal implements Branc checkLastUpdateDate(entity, dto); entity.fromDto(getReferentialLocale(), dto); return newSaveHelper() - .update(Branchline.SPI, entity) + .update(Branchline.SPI, entity, Entity::setLastUpdateDate, false, true) .updateLastUpdateDateField(Set.SPI, parent) - .updateLastUpdateDateTable(Branchline.SPI) .build(entity); -// return saveEntity(Set.SPI, Branchline.SPI, parent, entity); } protected Set getParent(BranchlineDto dto) { ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ll/observation/SetServiceLocalSupport.java ===================================== @@ -27,7 +27,6 @@ import fr.ird.observe.dto.data.ll.observation.SetDto; import fr.ird.observe.dto.data.ll.observation.SetReference; import fr.ird.observe.dto.data.ll.observation.SetStubDto; import fr.ird.observe.dto.form.Form; -import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.entities.data.ll.common.Trip; import fr.ird.observe.entities.data.ll.observation.Activity; import fr.ird.observe.entities.data.ll.observation.Set; @@ -43,7 +42,7 @@ import java.util.Objects; /** * @author Tony Chemit - dev@tchemit.fr */ -class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, SetDto, SetReference, Set, SetTopiaDao, SaveResultDto> implements SetService { +class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, SetDto, SetReference, Set, SetTopiaDao> implements SetService { public SetServiceLocalSupport() { super(Activity.SPI, Set.SPI, Activity.PROPERTY_SET); @@ -78,14 +77,6 @@ class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, S preCreated.setSettingStartLongitude(parent.getLongitude()); } -// @Override -// protected SaveResultDto onSave(Activity parent, Set entity, SetDto dto) { -// if (dto.isNotPersisted()) { -// parent.setSet(entity); -// } -// return saveEntity(entity); -// } - private java.util.Set<SetStubDto> getBrothers(Activity parent) { java.util.Set<SetStubDto> result = new HashSet<>(); Trip trip = getParent(Trip.SPI, Trip.PROPERTY_ACTIVITY_OBS, parent.getTopiaId()); ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/ActivityServiceLocalSupport.java ===================================== @@ -67,14 +67,6 @@ class ActivityServiceLocalSupport extends OpenableDataServiceLocalSupport<Route, preCreated.setCurrentFpaZone(currentFpaZone); } -// @Override -// protected SaveResultDto onSave(Route parent, Activity entity, ActivityDto dto) { -// if (dto.isNotPersisted()) { -// parent.addActivity(entity); -// } -// return saveEntity(spi, entity); -// } - @SuppressWarnings("unchecked") @Override protected Class<? extends DataEntity<?, ?>>[] getEntityTypeToCreateOnReplicate() { ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/FloatingObjectServiceLocalSupport.java ===================================== @@ -71,7 +71,7 @@ import java.util.stream.Collectors; /** * @author Tony Chemit - dev@tchemit.fr */ -class FloatingObjectServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, FloatingObjectDto, FloatingObjectReference, FloatingObject, FloatingObjectTopiaDao, SaveResultDto> implements FloatingObjectService { +class FloatingObjectServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, FloatingObjectDto, FloatingObjectReference, FloatingObject, FloatingObjectTopiaDao> implements FloatingObjectService { private static final Logger log = LogManager.getLogger(FloatingObjectServiceLocalSupport.class); ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/RouteServiceLocalSupport.java ===================================== @@ -93,8 +93,6 @@ class RouteServiceLocalSupport extends OpenableDataServiceLocalSupport<Trip, Rou } } return super.onSave(parent, entity, dto); -// parent.updateEndDate(); -// return saveEntity(spi, entity); } @SuppressWarnings("unchecked") ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/SampleDataServiceLocalSupport.java ===================================== @@ -77,9 +77,7 @@ public abstract class SampleDataServiceLocalSupport<C extends ContainerChildDto, return newSaveHelper() .update(spi, entity) .updateLastUpdateDateField(Set.SPI, parent) - .updateLastUpdateDateTable(spi) .build(entity); -// return saveEntity(Set.SPI, spi, parent, entity); } public final E newEntity() { ===================================== services/local-impl/src/main/java/fr/ird/observe/services/local/service/data/ps/observation/SetServiceLocalSupport.java ===================================== @@ -25,7 +25,6 @@ package fr.ird.observe.services.local.service.data.ps.observation; import fr.ird.observe.dto.data.ps.observation.SetDto; import fr.ird.observe.dto.data.ps.observation.SetReference; import fr.ird.observe.dto.form.Form; -import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.entities.data.ps.observation.Activity; import fr.ird.observe.entities.data.ps.observation.Route; import fr.ird.observe.entities.data.ps.observation.Set; @@ -40,7 +39,7 @@ import java.util.Date; /** * @author Tony Chemit - dev@tchemit.fr */ -class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, SetDto, SetReference, Set, SetTopiaDao, SaveResultDto> implements SetService { +class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, SetDto, SetReference, Set, SetTopiaDao> implements SetService { public SetServiceLocalSupport() { super(Activity.SPI, Set.SPI, Activity.PROPERTY_SET); @@ -79,11 +78,4 @@ class SetServiceLocalSupport extends EditableDataServiceLocalSupport<Activity, S preCreated.setSchoolType(schoolType); } -// @Override -// protected SaveResultDto onSave(Activity parent, Set entity, SetDto dto) { -// if (dto.isNotPersisted()) { -// parent.setSet(entity); -// } -// return saveEntity(entity); -// } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/35a7ad770ce43b61a751581aa9... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/35a7ad770ce43b61a751581aa9... You're receiving this email because of your account on gitlab.com.