This is an automated email from the git hooks/post-receive script. New commit to branch feature/4304_synchro_marees in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 35043332666718471bf82729816d9d6f8cc2cf3a Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Aug 8 15:58:50 2016 +0200 use now delete from sql producer instead of hibernate delete --- .../ui/admin/datasynchro/DataSynchroUIHandler.java | 7 ++- .../datasynchro/DataSynchronizeDeleteTask.java | 13 +++++ .../datasynchro/DataSynchronizeRequest.java | 21 +++++-- .../datasynchro/DataSynchronizeService.java | 11 ++++ .../datasynchro/DataSynchronizeServiceTopia.java | 65 +++++++++++++--------- 5 files changed, 83 insertions(+), 34 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java index f59acf1..332bf62 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/datasynchro/DataSynchroUIHandler.java @@ -256,8 +256,8 @@ public class DataSynchroUIHandler extends AdminTabUIHandler { DefaultListModel<DataSynchronizeTaskSupport> tasks = getStepModel().getTasks(); int size = tasks.size(); - DataSynchronizeRequest.Builder leftDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(rightSourceIsH2); - DataSynchronizeRequest.Builder rightDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(leftSourceIsH2); + DataSynchronizeRequest.Builder leftDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(leftSourceIsH2, rightSourceIsH2); + DataSynchronizeRequest.Builder rightDataSynchronizeRequestBuilder = DataSynchronizeRequest.builder(rightSourceIsH2, leftSourceIsH2); for (int i = 0; i < size; i++) { DataSynchronizeTaskSupport task = tasks.getElementAt(i); @@ -292,19 +292,20 @@ public class DataSynchroUIHandler extends AdminTabUIHandler { } - DataSynchronizeService leftDataSynchronizeService = leftSource.newDataSynchronizeService(); DataSynchronizeService rightDataSynchronizeService = rightSource.newDataSynchronizeService(); DataSynchronizeRequest leftDataSynchronizeRequest = leftDataSynchronizeRequestBuilder.build(); if (leftDataSynchronizeRequest.isNotEmpty()) { rightDataSynchronizeService.prepareRequestOnOppositeDataSource(leftDataSynchronizeRequest); + leftDataSynchronizeService.prepareRequestOnDataSource(leftDataSynchronizeRequest); leftDataSynchronizeService.executeRequest(leftDataSynchronizeRequest); } DataSynchronizeRequest rightDataSynchronizeRequest = rightDataSynchronizeRequestBuilder.build(); if (rightDataSynchronizeRequest.isNotEmpty()) { leftDataSynchronizeService.prepareRequestOnOppositeDataSource(rightDataSynchronizeRequest); + rightDataSynchronizeService.prepareRequestOnDataSource(rightDataSynchronizeRequest); rightDataSynchronizeService.executeRequest(rightDataSynchronizeRequest); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java index 490eae0..4b457ef 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeDeleteTask.java @@ -8,7 +8,20 @@ package fr.ird.observe.services.service.actions.datasynchro; */ public class DataSynchronizeDeleteTask extends DataSyncrhonizeTaskSupport { + /** + * Contient le code sql de la copie de la marée. + */ + private byte[] dataContent; + public DataSynchronizeDeleteTask(String programId, String tripId) { super(programId, tripId); } + + public byte[] getDataContent() { + return dataContent; + } + + public void setDataContent(byte[] dataContent) { + this.dataContent = dataContent; + } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java index 16cc43f..d5fd59d 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeRequest.java @@ -15,11 +15,15 @@ public class DataSynchronizeRequest { /** Logger. */ private static final Log log = LogFactory.getLog(DataSynchronizeRequest.class); - public static Builder builder(boolean oppositeH2) { - return new Builder(oppositeH2); + public static Builder builder(boolean h2, boolean oppositeH2) { + return new Builder(h2, oppositeH2); } /** + * Is data source use h2 ? + */ + private final boolean h2; + /** * Is opposite data source use h2 ? */ private final boolean oppositeH2; @@ -35,16 +39,18 @@ public class DataSynchronizeRequest { public static class Builder { + private final boolean h2; private final boolean oppositeH2; private final ImmutableSet.Builder<DataSynchronizeCopyTask> copyTasksBuilder = ImmutableSet.builder(); private final ImmutableSet.Builder<DataSynchronizeDeleteTask> deleteTasksBuilder = ImmutableSet.builder(); - public Builder(boolean oppositeH2) { + public Builder(boolean h2, boolean oppositeH2) { + this.h2 = h2; this.oppositeH2 = oppositeH2; } public DataSynchronizeRequest build() { - return new DataSynchronizeRequest(oppositeH2, copyTasksBuilder.build(), deleteTasksBuilder.build()); + return new DataSynchronizeRequest(h2, oppositeH2, copyTasksBuilder.build(), deleteTasksBuilder.build()); } public Builder addDeleteTask(DataSynchronizeDeleteTask deleteTask) { @@ -82,7 +88,12 @@ public class DataSynchronizeRequest { return oppositeH2; } - private DataSynchronizeRequest(boolean oppositeH2, ImmutableSet<DataSynchronizeCopyTask> copyTasks, ImmutableSet<DataSynchronizeDeleteTask> deleteTasks) { + public boolean isH2() { + return h2; + } + + private DataSynchronizeRequest(boolean h2, boolean oppositeH2, ImmutableSet<DataSynchronizeCopyTask> copyTasks, ImmutableSet<DataSynchronizeDeleteTask> deleteTasks) { + this.h2 = h2; this.oppositeH2 = oppositeH2; this.copyTasks = copyTasks; this.deleteTasks = deleteTasks; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java index 1f15d58..34882b2 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeService.java @@ -26,6 +26,17 @@ public interface DataSynchronizeService extends ObserveService { void prepareRequestOnOppositeDataSource(DataSynchronizeRequest request); /** + * Prépare la demande donnée en paramètre. Par exemple s'il y a des demandes de suppression, on récupère le code sql de suppression. + * + * Cette méthode doit être executée sur la base cible. + * + * @param request la demande des tâches à préparer. + */ + @ReadDataPermission + @PostRequest + void prepareRequestOnDataSource(DataSynchronizeRequest request); + + /** * Exécution de la demande donnée en paramètre. * * Cette méthode doit être exécutée sur la base cible. diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java index 3dead6c..b4c6e4e 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/datasynchro/DataSynchronizeServiceTopia.java @@ -2,13 +2,10 @@ package fr.ird.observe.services.service.actions.datasynchro; import com.google.common.collect.ImmutableSet; import fr.ird.observe.entities.Entities; -import fr.ird.observe.entities.longline.TripLongline; -import fr.ird.observe.entities.longline.TripLonglineTopiaDao; -import fr.ird.observe.entities.seine.TripSeine; -import fr.ird.observe.entities.seine.TripSeineTopiaDao; import fr.ird.observe.services.ObserveServiceContextTopia; import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.service.SqlScriptProducerRequest; +import fr.ird.observe.services.service.AddSqlScriptProducerRequest; +import fr.ird.observe.services.service.DeleteSqlScriptProducerRequest; import fr.ird.observe.services.service.SqlScriptProducerService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -38,19 +35,19 @@ public class DataSynchronizeServiceTopia extends ObserveServiceTopia implements for (DataSynchronizeCopyTask copyTask : request.getCopyTasks()) { if (log.isInfoEnabled()) { - log.info("Obtain trip sql content: " + copyTask.getProgramId() + " / " + copyTask.getTripId()); + log.info("Obtain trip sql copy content: " + copyTask.getProgramId() + " / " + copyTask.getTripId()); } // get the data content - SqlScriptProducerRequest sqlRequest; + AddSqlScriptProducerRequest sqlRequest; if (request.isOppositeH2()) { - sqlRequest = SqlScriptProducerRequest.forH2(); + sqlRequest = AddSqlScriptProducerRequest.forH2(); } else { - sqlRequest = SqlScriptProducerRequest.forPostgres(); + sqlRequest = AddSqlScriptProducerRequest.forPostgres(); } - sqlRequest.addDataIds(ImmutableSet.of(copyTask.getTripId())); - byte[] sqlScript = sqlScriptProducerService.produceSqlScript(sqlRequest); + sqlRequest.dataIdsToAdd(ImmutableSet.of(copyTask.getTripId())); + byte[] sqlScript = sqlScriptProducerService.produceAddSqlScript(sqlRequest); // store it in task copyTask.setDataContent(sqlScript); @@ -60,36 +57,52 @@ public class DataSynchronizeServiceTopia extends ObserveServiceTopia implements } @Override - public void executeRequest(DataSynchronizeRequest request) { - - TripSeineTopiaDao tripSeineDao = serviceContext.getTopiaPersistenceContext().getTripSeineDao(); - TripLonglineTopiaDao tripLonglineDao = serviceContext.getTopiaPersistenceContext().getTripLonglineDao(); + public void prepareRequestOnDataSource(DataSynchronizeRequest request) { for (DataSynchronizeDeleteTask deleteTask : request.getDeleteTasks()) { String tripId = deleteTask.getTripId(); boolean longlineId = Entities.isLonglineId(tripId); - if (longlineId) { + if (log.isInfoEnabled()) { + log.info("Obtain trip sql delete content: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId()); + } - if (log.isInfoEnabled()) { - log.info("Delete longline trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId()); - } - TripLongline tripLongline = tripLonglineDao.forTopiaIdEquals(tripId).findUnique(); - tripLonglineDao.delete(tripLongline); + // get the data content + DeleteSqlScriptProducerRequest sqlRequest; + if (request.isH2()) { + sqlRequest = DeleteSqlScriptProducerRequest.forH2(); } else { + sqlRequest = DeleteSqlScriptProducerRequest.forPostgres(); + } + sqlRequest.dataIdsToDelete(ImmutableSet.of(deleteTask.getTripId())); + byte[] sqlScript = sqlScriptProducerService.produceDeleteSqlScript(sqlRequest); + + // store it in task + deleteTask.setDataContent(sqlScript); + + } + } + + @Override + public void executeRequest(DataSynchronizeRequest request) { + + for (DataSynchronizeDeleteTask deleteTask : request.getDeleteTasks()) { - if (log.isInfoEnabled()) { - log.info("Delete seine trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId()); - } - TripSeine tripSeine = tripSeineDao.forTopiaIdEquals(tripId).findUnique(); - tripSeineDao.delete(tripSeine); + String tripId = deleteTask.getTripId(); + boolean longlineId = Entities.isLonglineId(tripId); + if (log.isInfoEnabled()) { + log.info("Delete trip: " + deleteTask.getProgramId() + " / " + deleteTask.getTripId()); } + serviceContext.getTopiaApplicationContext().executeSqlStatements(deleteTask.getDataContent()); } + // need to flush to make deletion complete, before to execute the copy sql script + serviceContext.getTopiaPersistenceContext().flush(); + for (DataSynchronizeCopyTask copyTask : request.getCopyTasks()) { if (log.isInfoEnabled()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.