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 8a8733c4cb7cd2361889708d4b6bd40949e38051 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Aug 16 12:28:21 2016 +0200 Ajout du moteur de synchro bi-di --- .../ReferentialSynchronizeServiceController.java | 14 +- .../ng/ReferentialSynchronizeRequest.java | 178 +++++----------- .../ng/ReferentialSynchronizeService.java | 31 +-- .../ng/ReferentialSynchronizeServiceEngine.java | 36 ++++ ...entialSynchronizeServiceProduceSqlsRequest.java | 64 ++++++ ...rentialSynchronizeServiceProduceSqlsResult.java | 26 +++ .../ng/ReferentialSynchronizeSqlsRequest.java | 101 +++++++++ .../ng/task/ReferentialSynchronizeAddTask.java | 17 -- .../ng/task/ReferentialSynchronizeDeleteTask.java | 24 --- .../ReferentialSynchronizeDesactivateTask.java | 24 --- .../ng/task/ReferentialSynchronizeRevertTask.java | 17 -- .../ng/task/ReferentialSynchronizeTask.java | 37 ++++ .../ng/task/ReferentialSynchronizeTaskSupport.java | 38 ---- .../ng/task/ReferentialSynchronizeTaskType.java | 26 +++ .../ng/task/ReferentialSynchronizeUpdateTask.java | 17 -- .../ng/ReferentialSynchronizeServiceTopia.java | 138 ++---------- .../ReferentialSynchronizeSqlsRequestBuilder.java | 234 +++++++++++++++++++++ 17 files changed, 608 insertions(+), 414 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/ng/ReferentialSynchronizeServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/ng/ReferentialSynchronizeServiceController.java index b523601..bc1c876 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/ng/ReferentialSynchronizeServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/ng/ReferentialSynchronizeServiceController.java @@ -3,6 +3,7 @@ package fr.ird.observe.application.web.controller.v1.actions.synchro.referential import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceControllerSupport; import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeRequest; import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeService; +import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeSqlsRequest; /** * Created on 09/08/16. @@ -16,17 +17,12 @@ public class ReferentialSynchronizeServiceController extends ObserveAuthenticate } @Override - public void prepareRequestOnOppositeDataSource(ReferentialSynchronizeRequest request) { - service.prepareRequestOnOppositeDataSource(request); + public ReferentialSynchronizeSqlsRequest produceSqlsRequest(ReferentialSynchronizeRequest request) { + return service.produceSqlsRequest(request); } @Override - public void prepareRequestOnDataSource(ReferentialSynchronizeRequest request) { - service.prepareRequestOnDataSource(request); - } - - @Override - public void executeRequest(ReferentialSynchronizeRequest request) { - service.executeRequest(request); + public void executeSqlsRequests(ReferentialSynchronizeSqlsRequest localSqlsRequest, ReferentialSynchronizeSqlsRequest oppositeSqlsRequest) { + service.executeSqlsRequests(localSqlsRequest, oppositeSqlsRequest); } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java index 3ddcb8a..c8ea1aa 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java @@ -1,16 +1,16 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; +import com.google.common.collect.ImmutableMultimap; 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.service.actions.synchro.referential.ng.task.ReferentialSynchronizeAddTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeDeleteTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeDesactivateTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeRevertTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeUpdateTask; +import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTask; +import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTaskType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.Set; +import java.util.stream.Collectors; + /** * Created on 08/08/16. * @@ -22,145 +22,73 @@ public class ReferentialSynchronizeRequest { /** Logger. */ private static final Log log = LogFactory.getLog(ReferentialSynchronizeRequest.class); - 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; - /** - * Add tasks. - */ - private final ImmutableSet<ReferentialSynchronizeAddTask> addTasks; - /** - * Update tasks. - */ - private final ImmutableSet<ReferentialSynchronizeUpdateTask> updateTasks; - /** - * Revert tasks. - */ - private final ImmutableSet<ReferentialSynchronizeRevertTask> revertTasks; - /** - * Delete tasks. - */ - private final ImmutableSet<ReferentialSynchronizeDeleteTask> deleteTasks; - /** - * Desactivate tasks. - */ - private final ImmutableSet<ReferentialSynchronizeDesactivateTask> desactivateTasks; - - public static class Builder { - - private final boolean h2; - private final boolean oppositeH2; - private final ImmutableSet.Builder<ReferentialSynchronizeAddTask> addTasksBuilder = ImmutableSet.builder(); - private final ImmutableSet.Builder<ReferentialSynchronizeUpdateTask> updateTasksBuilder = ImmutableSet.builder(); - private final ImmutableSet.Builder<ReferentialSynchronizeRevertTask> revertTasksBuilder = ImmutableSet.builder(); - private final ImmutableSet.Builder<ReferentialSynchronizeDeleteTask> deleteTasksBuilder = ImmutableSet.builder(); - private final ImmutableSet.Builder<ReferentialSynchronizeDesactivateTask> desactivateTasksBuilder = ImmutableSet.builder(); - - public Builder(boolean h2, boolean oppositeH2) { - this.h2 = h2; - this.oppositeH2 = oppositeH2; - } - - public ReferentialSynchronizeRequest build() { - return new ReferentialSynchronizeRequest(h2, oppositeH2, addTasksBuilder.build(), updateTasksBuilder.build(), revertTasksBuilder.build(), deleteTasksBuilder.build(), desactivateTasksBuilder.build()); - } - - public <R extends ReferentialDto> Builder addDeleteTask(ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - - if (log.isInfoEnabled()) { - log.info("Add delete task for data: " + reference.getType().getName() + " / " + reference.getId()); - } - deleteTasksBuilder.add(new ReferentialSynchronizeDeleteTask<>(reference, replaceReference)); - return this; - } - - public <R extends ReferentialDto> Builder addDesactivateTask(ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - - if (log.isInfoEnabled()) { - log.info("Add desactivate (without replacement) task for data: " + reference.getType().getName() + " / " + reference.getId()); - } - desactivateTasksBuilder.add(new ReferentialSynchronizeDesactivateTask<>(reference, replaceReference)); - return this; - } - - public <R extends ReferentialDto> Builder addAddTask(ReferentialReference<R> reference) { - if (log.isInfoEnabled()) { - log.info("Add add task for trip: " + reference.getType().getName() + " / " + reference.getId()); - } - addTasksBuilder.add(new ReferentialSynchronizeAddTask<>(reference)); - return this; - } + private final ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> tasks; + private final ImmutableSet<Class<? extends ReferentialDto>> types; - public <R extends ReferentialDto> Builder addUpdateTask(ReferentialReference<R> reference) { - if (log.isInfoEnabled()) { - log.info("Add update task for trip: " + reference.getType().getName() + " / " + reference.getId()); - } - updateTasksBuilder.add(new ReferentialSynchronizeUpdateTask<>(reference)); - return this; - } + private ReferentialSynchronizeRequest(ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> tasks, + ImmutableSet<Class<? extends ReferentialDto>> types) { + this.tasks = tasks; + this.types = types; + } - public <R extends ReferentialDto> Builder addRevertTask(ReferentialReference<R> reference) { - if (log.isInfoEnabled()) { - log.info("Add revert task for trip: " + reference.getType().getName() + " / " + reference.getId()); - } - revertTasksBuilder.add(new ReferentialSynchronizeRevertTask<>(reference)); - return this; - } + public static Builder builder() { + return new Builder(); + } + public boolean isNotEmpty() { + return !tasks.isEmpty(); } - public ImmutableSet<ReferentialSynchronizeAddTask> getAddTasks() { - return addTasks; + public ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> getTasks() { + return tasks; } - public ImmutableSet<ReferentialSynchronizeUpdateTask> getUpdateTasks() { - return updateTasks; + public <R extends ReferentialDto> Set<ReferentialSynchronizeTask<R>> getAddTasks(Class<R> referentialName) { + return getTasks0(ReferentialSynchronizeTaskType.ADD, referentialName); } - public ImmutableSet<ReferentialSynchronizeRevertTask> getRevertTasks() { - return revertTasks; + public <R extends ReferentialDto> Set<ReferentialSynchronizeTask<R>> getUpdateTasks(Class<R> referentialName) { + return getTasks0(ReferentialSynchronizeTaskType.UPDATE, referentialName); } - public ImmutableSet<ReferentialSynchronizeDeleteTask> getDeleteTasks() { - return deleteTasks; + public <R extends ReferentialDto> Set<ReferentialSynchronizeTask<R>> getRevertTasks(Class<R> referentialName) { + return getTasks0(ReferentialSynchronizeTaskType.REVERT, referentialName); } - public ImmutableSet<ReferentialSynchronizeDesactivateTask> getDesactivateTasks() { - return desactivateTasks; + public <R extends ReferentialDto> Set<ReferentialSynchronizeTask<R>> getDesactivateTasks(Class<R> referentialName) { + return getTasks0(ReferentialSynchronizeTaskType.DESACTIVATE, referentialName); } - public boolean isNotEmpty() { - return !(addTasks.isEmpty() && updateTasks.isEmpty() && revertTasks.isEmpty() && deleteTasks.isEmpty() && desactivateTasks.isEmpty()); + public <R extends ReferentialDto> Set<ReferentialSynchronizeTask<R>> getDeleteTasks(Class<R> referentialName) { + return getTasks0(ReferentialSynchronizeTaskType.DELETE, referentialName); } - public boolean isOppositeH2() { - return oppositeH2; + public ImmutableSet<Class<? extends ReferentialDto>> getTypes() { + return types; } - public boolean isH2() { - return h2; + private <R extends ReferentialDto> Set<ReferentialSynchronizeTask<R>> getTasks0(ReferentialSynchronizeTaskType type, Class<R> referentialName) { + Set<ReferentialSynchronizeTask<?>> collect = tasks.get(type).stream().filter(t -> referentialName.equals(t.getReferentialType())).collect(Collectors.toSet()); + return (Set) collect; } - private ReferentialSynchronizeRequest(boolean h2, boolean oppositeH2, - ImmutableSet<ReferentialSynchronizeAddTask> addTasks, - ImmutableSet<ReferentialSynchronizeUpdateTask> updateTasks, - ImmutableSet<ReferentialSynchronizeRevertTask> revertTasks, ImmutableSet<ReferentialSynchronizeDeleteTask> deleteTasks, - ImmutableSet<ReferentialSynchronizeDesactivateTask> desactivateTasks) { - this.h2 = h2; - this.oppositeH2 = oppositeH2; - this.addTasks = addTasks; - this.updateTasks = updateTasks; - this.revertTasks = revertTasks; - this.deleteTasks = deleteTasks; - this.desactivateTasks = desactivateTasks; + public static class Builder { + + private final ImmutableMultimap.Builder<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> tasksBuilder = ImmutableMultimap.builder(); + private final ImmutableSet.Builder<Class<? extends ReferentialDto>> typesBuilder = ImmutableSet.builder(); + + public ReferentialSynchronizeRequest build() { + return new ReferentialSynchronizeRequest(tasksBuilder.build(), typesBuilder.build()); + } + + public <R extends ReferentialDto> Builder addTask(ReferentialSynchronizeTaskType taskType, Class<R> type, String referentialId, String replaceReferentialId) { + if (log.isInfoEnabled()) { + log.info("Add " + taskType + " task: " + type.getName() + " / " + referentialId); + } + tasksBuilder.put(taskType, new ReferentialSynchronizeTask<>(type, referentialId, replaceReferentialId)); + typesBuilder.add(type); + return this; + } + } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeService.java index f84279a..b8064d5 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeService.java @@ -3,6 +3,7 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.spi.PostRequest; import fr.ird.observe.services.spi.ReadDataPermission; +import fr.ird.observe.services.spi.ReadReferentialPermission; import fr.ird.observe.services.spi.Write; import fr.ird.observe.services.spi.WriteDataPermission; @@ -14,39 +15,15 @@ import fr.ird.observe.services.spi.WriteDataPermission; */ public interface ReferentialSynchronizeService extends ObserveService { - /** - * Prépare la demande donnée en paramètre. Par exemple s'il y a des demandes de recopie, on récupère le code sql de recopie. - * - * Cette méthode doit être executée sur la base opposée. - * - * @param request la demande des tâches à préparer. - */ + @ReadReferentialPermission @ReadDataPermission @PostRequest - void prepareRequestOnOppositeDataSource(ReferentialSynchronizeRequest request); + ReferentialSynchronizeSqlsRequest produceSqlsRequest(ReferentialSynchronizeRequest 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(ReferentialSynchronizeRequest request); - - /** - * Exécution de la demande donnée en paramètre. - * - * Cette méthode doit être exécutée sur la base cible. - * - * @param request la demande des tâches à réaliser. - */ @ReadDataPermission @WriteDataPermission @Write @PostRequest - void executeRequest(ReferentialSynchronizeRequest request); + void executeSqlsRequests(ReferentialSynchronizeSqlsRequest localSqlsRequest, ReferentialSynchronizeSqlsRequest oppositeSqlsRequest); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceEngine.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceEngine.java new file mode 100644 index 0000000..f3df603 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceEngine.java @@ -0,0 +1,36 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng; + +/** + * Created on 14/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class ReferentialSynchronizeServiceEngine { + + private final ReferentialSynchronizeService leftService; + private final ReferentialSynchronizeService rightService; + + public ReferentialSynchronizeServiceEngine(ReferentialSynchronizeService leftService, ReferentialSynchronizeService rightService) { + this.leftService = leftService; + this.rightService = rightService; + } + + public ReferentialSynchronizeServiceProduceSqlsResult produceSqlsRequests(ReferentialSynchronizeServiceProduceSqlsRequest produceSqlsRequests) { + + ReferentialSynchronizeSqlsRequest leftSqlsRequest = leftService.produceSqlsRequest(produceSqlsRequests.getLeftRequest()); + ReferentialSynchronizeSqlsRequest rightSqlsRequest = rightService.produceSqlsRequest(produceSqlsRequests.getRightRequest()); + + return new ReferentialSynchronizeServiceProduceSqlsResult(leftSqlsRequest, rightSqlsRequest); + + } + + public void executeSqlRequests(ReferentialSynchronizeServiceProduceSqlsResult sqlsRequests) { + + ReferentialSynchronizeSqlsRequest leftSqlsRequest = sqlsRequests.getLeftRequest(); + ReferentialSynchronizeSqlsRequest rightSqlsRequest = sqlsRequests.getRightRequest(); + leftService.executeSqlsRequests(leftSqlsRequest, rightSqlsRequest); + rightService.executeSqlsRequests(rightSqlsRequest, leftSqlsRequest); + + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java new file mode 100644 index 0000000..92e7ef8 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java @@ -0,0 +1,64 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng; + +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTaskType; + +/** + * Created on 15/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferentialSynchronizeServiceProduceSqlsRequest { + + protected final ReferentialSynchronizeRequest leftRequest; + protected final ReferentialSynchronizeRequest rightRequest; + + private ReferentialSynchronizeServiceProduceSqlsRequest(ReferentialSynchronizeRequest leftRequest, ReferentialSynchronizeRequest rightRequest) { + this.leftRequest = leftRequest; + this.rightRequest = rightRequest; + } + + public static Builder builder() { + return new Builder(); + } + + public ReferentialSynchronizeRequest getLeftRequest() { + return leftRequest; + } + + public ReferentialSynchronizeRequest getRightRequest() { + return rightRequest; + } + + public static class Builder { + + private final ReferentialSynchronizeRequest.Builder leftRequestBuilder; + private final ReferentialSynchronizeRequest.Builder rightRequestBuilder; + + private Builder() { + leftRequestBuilder = ReferentialSynchronizeRequest.builder(); + rightRequestBuilder = ReferentialSynchronizeRequest.builder(); + } + + public ReferentialSynchronizeServiceProduceSqlsRequest build() { + + return new ReferentialSynchronizeServiceProduceSqlsRequest(leftRequestBuilder.build(), + rightRequestBuilder.build()); + + } + + public <R extends ReferentialDto> Builder addTask(boolean left, + ReferentialSynchronizeTaskType taskType, + Class<R> type, + String id, + String replaceId) { + getRequestBuilder(left).addTask(taskType, type, id, replaceId); + return this; + } + + private ReferentialSynchronizeRequest.Builder getRequestBuilder(boolean left) { + return left ? leftRequestBuilder : rightRequestBuilder; + } + + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java new file mode 100644 index 0000000..e495f4f --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java @@ -0,0 +1,26 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng; + +/** + * Created on 15/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferentialSynchronizeServiceProduceSqlsResult { + + protected final ReferentialSynchronizeSqlsRequest leftRequest; + protected final ReferentialSynchronizeSqlsRequest rightRequest; + + public ReferentialSynchronizeServiceProduceSqlsResult(ReferentialSynchronizeSqlsRequest leftRequest, ReferentialSynchronizeSqlsRequest rightRequest) { + this.leftRequest = leftRequest; + this.rightRequest = rightRequest; + } + + public ReferentialSynchronizeSqlsRequest getLeftRequest() { + return leftRequest; + } + + public ReferentialSynchronizeSqlsRequest getRightRequest() { + return rightRequest; + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java new file mode 100644 index 0000000..b3ac9b9 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java @@ -0,0 +1,101 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 08/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class ReferentialSynchronizeSqlsRequest { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ReferentialSynchronizeSqlsRequest.class); + + private final byte[] insertSqlCode; + private final byte[] updateSqlCode; + private final byte[] deleteSqlCode; + private final byte[] desactivateSqlCode; + + private ReferentialSynchronizeSqlsRequest(String insertSqlCode, + String updateSqlCode, + String deleteSqlCode, + String desactivateSqlCode) { + this.insertSqlCode = insertSqlCode.getBytes(); + this.updateSqlCode = updateSqlCode.getBytes(); + this.deleteSqlCode = deleteSqlCode.getBytes(); + this.desactivateSqlCode = desactivateSqlCode.getBytes(); + } + + public static Builder builder() { + return new Builder(); + } + + public byte[] getInsertSqlCode() { + return insertSqlCode; + } + + public byte[] getUpdateSqlCode() { + return updateSqlCode; + } + + public byte[] getDeleteSqlCode() { + return deleteSqlCode; + } + + public byte[] getDesactivateSqlCode() { + return desactivateSqlCode; + } + + public static class Builder { + + private final StringBuilder addTasksBuilder = new StringBuilder(); + private final StringBuilder updateTasksBuilder = new StringBuilder(); + private final StringBuilder deleteTasksBuilder = new StringBuilder(); + private final StringBuilder desactivateTasksBuilder = new StringBuilder(); + + public ReferentialSynchronizeSqlsRequest build() { + return new ReferentialSynchronizeSqlsRequest(addTasksBuilder.toString(), + updateTasksBuilder.toString(), + deleteTasksBuilder.toString(), + desactivateTasksBuilder.toString()); + } + + public Builder addInsertStatement(String sql) { + if (log.isInfoEnabled()) { + log.info("Add add sql: " + sql); + } + addTasksBuilder.append(sql); + return this; + } + + public Builder addUpdateStatement(String sql) { + if (log.isInfoEnabled()) { + log.info("Add update sql: " + sql); + } + updateTasksBuilder.append(sql); + return this; + } + + public Builder addDeleteStatement(String sql) { + + if (log.isInfoEnabled()) { + log.info("Add delete sql: " + sql); + } + deleteTasksBuilder.append(sql); + return this; + } + + public Builder addDesactivateStatement(String sql) { + + if (log.isInfoEnabled()) { + log.info("Add desactivate sql: " + sql); + } + desactivateTasksBuilder.append(sql); + return this; + } + + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeAddTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeAddTask.java deleted file mode 100644 index 030877b..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeAddTask.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.ng.task; - -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; - -/** - * Created on 08/08/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class ReferentialSynchronizeAddTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - - public ReferentialSynchronizeAddTask(ReferentialReference<R> reference) { - super(reference); - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeDeleteTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeDeleteTask.java deleted file mode 100644 index 4d1d5a2..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeDeleteTask.java +++ /dev/null @@ -1,24 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.ng.task; - -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; - -/** - * Created on 08/08/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class ReferentialSynchronizeDeleteTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - - private final ReferentialReference<R> replaceReference; - - public ReferentialSynchronizeDeleteTask(ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - super(reference); - this.replaceReference = replaceReference; - } - - public ReferentialReference<R> getReplaceReference() { - return replaceReference; - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeDesactivateTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeDesactivateTask.java deleted file mode 100644 index 4c44ad1..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeDesactivateTask.java +++ /dev/null @@ -1,24 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.ng.task; - -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; - -/** - * Created on 08/08/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class ReferentialSynchronizeDesactivateTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - - private final ReferentialReference<R> replaceReference; - - public ReferentialSynchronizeDesactivateTask(ReferentialReference<R> reference, ReferentialReference<R> replaceReference) { - super(reference); - this.replaceReference = replaceReference; - } - - public ReferentialReference<R> getReplaceReference() { - return replaceReference; - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeRevertTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeRevertTask.java deleted file mode 100644 index 7510e5e..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeRevertTask.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.ng.task; - -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; - -/** - * Created on 08/08/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class ReferentialSynchronizeRevertTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - - public ReferentialSynchronizeRevertTask(ReferentialReference<R> reference) { - super(reference); - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTask.java new file mode 100644 index 0000000..1f409bf --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTask.java @@ -0,0 +1,37 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng.task; + +import fr.ird.observe.services.dto.referential.ReferentialDto; + +import java.util.Optional; + +/** + * Created on 14/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class ReferentialSynchronizeTask<R extends ReferentialDto> { + + private final Class<R> referentialType; + private final String referentialId; + private final String replaceReferentialId; + + public ReferentialSynchronizeTask(Class<R> referentialName, String referentialId, String replaceReferenceId) { + this.referentialType = referentialName; + this.referentialId = referentialId; + this.replaceReferentialId = replaceReferenceId; + } + + public Class<R> getReferentialType() { + return referentialType; + } + + public String getReferentialId() { + return referentialId; + } + + public Optional<String> getOptionalReplaceReferentialId() { + return Optional.ofNullable(replaceReferentialId); + } + +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTaskSupport.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTaskSupport.java deleted file mode 100644 index a9f3e8d..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTaskSupport.java +++ /dev/null @@ -1,38 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.ng.task; - -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; - -/** - * Created on 08/08/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public abstract class ReferentialSynchronizeTaskSupport<R extends ReferentialDto> { - - private final Class<R> referentialType; - private final String referentialId; - private byte[] dataContent; - - protected ReferentialSynchronizeTaskSupport(ReferentialReference<R> reference) { - this.referentialType = reference.getType(); - this.referentialId = reference.getId(); - } - - public Class<R> getReferentialType() { - return referentialType; - } - - public String getReferentialId() { - return referentialId; - } - - 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/synchro/referential/ng/task/ReferentialSynchronizeTaskType.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTaskType.java new file mode 100644 index 0000000..549fa2c --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeTaskType.java @@ -0,0 +1,26 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng.task; + +/** + * Created on 14/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public enum ReferentialSynchronizeTaskType { + + ADD(false), + UPDATE(false), + REVERT(false), + DELETE(true), + DESACTIVATE(true); + + private final boolean withReplace; + + ReferentialSynchronizeTaskType(boolean withReplace) { + this.withReplace = withReplace; + } + + public boolean withReplace() { + return withReplace; + } +} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeUpdateTask.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeUpdateTask.java deleted file mode 100644 index 67397ca..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/task/ReferentialSynchronizeUpdateTask.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.ng.task; - -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; - -/** - * Created on 08/08/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class ReferentialSynchronizeUpdateTask<R extends ReferentialDto> extends ReferentialSynchronizeTaskSupport<R> { - - public ReferentialSynchronizeUpdateTask(ReferentialReference<R> reference) { - super(reference); - } -} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceTopia.java index f736624..ad21b82 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceTopia.java @@ -1,18 +1,10 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.entities.Entities; import fr.ird.observe.services.ObserveServiceContextTopia; import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.service.AddSqlScriptProducerRequest; -import fr.ird.observe.services.service.DeleteSqlScriptProducerRequest; -import fr.ird.observe.services.service.SqlScriptProducerService; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeAddTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeDeleteTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeDesactivateTask; -import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeUpdateTask; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.TimeLog; /** * Created on 08/08/16. @@ -24,135 +16,49 @@ public class ReferentialSynchronizeServiceTopia extends ObserveServiceTopia impl /** Logger. */ private static final Log log = LogFactory.getLog(ReferentialSynchronizeServiceTopia.class); - - protected SqlScriptProducerService sqlScriptProducerService; + private static final TimeLog timeLog = new TimeLog(ReferentialSynchronizeServiceTopia.class); @Override public void setServiceContext(ObserveServiceContextTopia serviceContext) { super.setServiceContext(serviceContext); - sqlScriptProducerService = serviceContext.newService(SqlScriptProducerService.class); } @Override - public void prepareRequestOnOppositeDataSource(ReferentialSynchronizeRequest request) { - - for (ReferentialSynchronizeAddTask copyTask : request.getAddTasks()) { - - if (log.isInfoEnabled()) { - log.info("Obtain add data sql copy content: " + copyTask.getReferentialType().getName() + " / " + copyTask.getReferentialId()); - } - - // get the data content - - AddSqlScriptProducerRequest sqlRequest; - if (request.isOppositeH2()) { - sqlRequest = AddSqlScriptProducerRequest.forH2(); - } else { - sqlRequest = AddSqlScriptProducerRequest.forPostgres(); - } - sqlRequest.dataIdsToAdd(ImmutableSet.of(copyTask.getReferentialId())); - byte[] sqlScript = sqlScriptProducerService.produceAddSqlScript(sqlRequest); + public ReferentialSynchronizeSqlsRequest produceSqlsRequest(ReferentialSynchronizeRequest request) { - // store it in task - copyTask.setDataContent(sqlScript); + long startTime = TimeLog.getTime(); + if (log.isTraceEnabled()) { + log.trace("produceSqlsRequest(" + request + ")"); } + ReferentialSynchronizeSqlsRequest result = ReferentialSynchronizeSqlsRequestBuilder + .builder(this, serviceContext.getTopiaApplicationContext().getMetadataModel(), request) + .build(); - for (ReferentialSynchronizeUpdateTask copyTask : request.getUpdateTasks()) { - - if (log.isInfoEnabled()) { - log.info("Obtain update data sql copy content: " + copyTask.getReferentialType().getName() + " / " + copyTask.getReferentialId()); - } - - // get the data content - - AddSqlScriptProducerRequest sqlRequest; - if (request.isOppositeH2()) { - sqlRequest = AddSqlScriptProducerRequest.forH2(); - } else { - sqlRequest = AddSqlScriptProducerRequest.forPostgres(); - } - sqlRequest.dataIdsToAdd(ImmutableSet.of(copyTask.getReferentialId())); - byte[] sqlScript = sqlScriptProducerService.produceAddSqlScript(sqlRequest); - - // store it in task - copyTask.setDataContent(sqlScript); - - } - - } - - @Override - public void prepareRequestOnDataSource(ReferentialSynchronizeRequest request) { - - for (ReferentialSynchronizeDeleteTask deleteTask : request.getDeleteTasks()) { - - String tripId = deleteTask.getReferentialId(); - boolean longlineId = Entities.isLonglineId(tripId); + timeLog.log(startTime, "produceSqlsRequest"); + return result; - if (log.isInfoEnabled()) { - log.info("Obtain trip sql delete content: " + deleteTask.getReferentialType().getName() + " / " + deleteTask.getReferentialId()); - } - - // get the data content - - DeleteSqlScriptProducerRequest sqlRequest; - if (request.isH2()) { - sqlRequest = DeleteSqlScriptProducerRequest.forH2(); - } else { - sqlRequest = DeleteSqlScriptProducerRequest.forPostgres(); - } - sqlRequest.dataIdsToDelete(ImmutableSet.of(deleteTask.getReferentialId())); - byte[] sqlScript = sqlScriptProducerService.produceDeleteSqlScript(sqlRequest); - - // store it in task - deleteTask.setDataContent(sqlScript); - - } } @Override - public void executeRequest(ReferentialSynchronizeRequest request) { + public void executeSqlsRequests(ReferentialSynchronizeSqlsRequest request, ReferentialSynchronizeSqlsRequest oppositeSqlsRequest) { - for (ReferentialSynchronizeDeleteTask task : request.getDeleteTasks()) { - - String tripId = task.getReferentialId(); - boolean longlineId = Entities.isLonglineId(tripId); - - if (log.isInfoEnabled()) { - log.info("Delete data: " + task.getReferentialType().getName() + " / " + task.getReferentialId()); - } - serviceContext.getTopiaApplicationContext().executeSqlStatements(task.getDataContent()); + long startTime = TimeLog.getTime(); + if (log.isTraceEnabled()) { + log.trace("executeSqlsRequests(" + request + ")"); } - for (ReferentialSynchronizeAddTask task : request.getAddTasks()) { + byte[] insertSqlCode = oppositeSqlsRequest.getInsertSqlCode(); + byte[] updateSqlCode = oppositeSqlsRequest.getUpdateSqlCode(); + byte[] deleteSqlCode = request.getDeleteSqlCode(); + byte[] desactivateSqlCode = request.getDesactivateSqlCode(); - if (log.isInfoEnabled()) { - log.info("Add data: " + task.getReferentialType().getName() + " / " + task.getReferentialId()); - } - serviceContext.getTopiaApplicationContext().executeSqlStatements(task.getDataContent()); - - } + getTopiaPersistenceContext().executeSqlScripts(insertSqlCode, updateSqlCode, desactivateSqlCode, deleteSqlCode); - for (ReferentialSynchronizeUpdateTask task : request.getUpdateTasks()) { - - if (log.isInfoEnabled()) { - log.info("Update data: " + task.getReferentialType().getName() + " / " + task.getReferentialId()); - } - serviceContext.getTopiaApplicationContext().executeSqlStatements(task.getDataContent()); - - } - - for (ReferentialSynchronizeDesactivateTask task : request.getDesactivateTasks()) { - - if (log.isInfoEnabled()) { - log.info("Desactivate data (without replacement) : " + task.getReferentialType().getName() + " / " + task.getReferentialId()); - } - serviceContext.getTopiaApplicationContext().executeSqlStatements(task.getDataContent()); - - } + timeLog.log(startTime, "produceSqlsRequest"); } + } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java new file mode 100644 index 0000000..1de4f5a --- /dev/null +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java @@ -0,0 +1,234 @@ +package fr.ird.observe.services.service.actions.synchro.referential.ng; + +import fr.ird.observe.ObserveEntityEnum; +import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; +import fr.ird.observe.services.binder.BinderEngine; +import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; +import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTask; +import fr.ird.observe.services.service.actions.synchro.referential.sql.DeleteSqlStatementGenerator; +import fr.ird.observe.services.service.actions.synchro.referential.sql.DesactivateSqlStatementGenerator; +import fr.ird.observe.services.service.actions.synchro.referential.sql.InsertSqlStatementGenerator; +import fr.ird.observe.services.service.actions.synchro.referential.sql.ReplaceSqlStatementGenerator; +import fr.ird.observe.services.service.actions.synchro.referential.sql.UpdateSqlStatementGenerator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; + +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Created on 14/08/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ReferentialSynchronizeSqlsRequestBuilder { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ReferentialSynchronizeSqlsRequestBuilder.class); + + private final BinderEngine binderEngine; + private final ReferentialSynchronizeServiceTopia service; + private final ReferentialLocale referentialLocale; + private final TopiaMetadataModel metadataModel; + private final ReferentialSynchronizeRequest request; + private final ReferentialSynchronizeSqlsRequest.Builder resultBuilder; + + private ReferentialSynchronizeSqlsRequestBuilder(ReferentialSynchronizeServiceTopia service, + TopiaMetadataModel metadataModel, + ReferentialSynchronizeRequest request) { + this.metadataModel = metadataModel; + this.request = request; + this.binderEngine = BinderEngine.get(); + this.service = service; + this.referentialLocale = service.getReferentialLocale(); + this.resultBuilder = new ReferentialSynchronizeSqlsRequest.Builder(); + } + + public static ReferentialSynchronizeSqlsRequestBuilder builder(ReferentialSynchronizeServiceTopia service, + TopiaMetadataModel metadataModel, + ReferentialSynchronizeRequest request) { + + return new ReferentialSynchronizeSqlsRequestBuilder(service, metadataModel, request); + } + + public ReferentialSynchronizeSqlsRequest build() { + + request.getTypes().forEach(this::build0); + return resultBuilder.build(); + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> void build0(Class<R> type) { + + Class<E> entityType = binderEngine.getReferentialEntityType(type); + ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(entityType); + String referentialName = entityEnum.name(); + + Set<ReferentialSynchronizeTask<R>> addTasks = request.getAddTasks(type); + if (log.isInfoEnabled()) { + log.info("Add: " + addTasks.size()); + } + onAdd(referentialName, type, addTasks); + + Set<ReferentialSynchronizeTask<R>> updateTasks = request.getUpdateTasks(type); + if (log.isInfoEnabled()) { + log.info("Update: " + updateTasks.size()); + } + onUpdate(referentialName, type, updateTasks); + + Set<ReferentialSynchronizeTask<R>> revertTasks = request.getRevertTasks(type); + if (log.isInfoEnabled()) { + log.info("Revert: " + revertTasks.size()); + } + onRevert(referentialName, type, revertTasks); + + Set<ReferentialSynchronizeTask<R>> deleteTasks = request.getDeleteTasks(type); + if (log.isInfoEnabled()) { + log.info("Delete: " + deleteTasks.size()); + } + onDelete(referentialName, type, deleteTasks); + + Set<ReferentialSynchronizeTask<R>> desactivateTasks = request.getDesactivateTasks(type); + if (log.isInfoEnabled()) { + log.info("Desactivate: " + desactivateTasks.size()); + } + onDesactivate(referentialName, type, desactivateTasks); + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> void onAdd(String referentialName, Class<R> type, Set<ReferentialSynchronizeTask<R>> tasks) { + + ReferentialBinderSupport<E, R> binder = binderEngine.getReferentialBinder(type); + Class<E> entityType = binderEngine.getReferentialEntityType(type); + TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); + InsertSqlStatementGenerator<R> insertGenerator = new InsertSqlStatementGenerator<>(metadata, type); + List<E> insertEntities = loadEntities(entityType, tasks); + for (E entity : insertEntities) { + R referential = binder.toDto(referentialLocale, entity); + String sql = insertGenerator.generateSql(referential); + + if (log.isInfoEnabled()) { + log.info("Insert referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + } + resultBuilder.addInsertStatement(sql); + } + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> void onUpdate(String referentialName, Class<R> type, Set<ReferentialSynchronizeTask<R>> tasks) { + + ReferentialBinderSupport<E, R> binder = binderEngine.getReferentialBinder(type); + TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); + Class<E> entityType = binderEngine.getReferentialEntityType(type); + + UpdateSqlStatementGenerator<R> updateGenerator = new UpdateSqlStatementGenerator<>(metadata, type); + List<E> updateEntities = loadEntities(entityType, tasks); + for (E entity : updateEntities) { + R referential = binder.toDto(referentialLocale, entity); + String sql = updateGenerator.generateSql(referential); + + if (log.isInfoEnabled()) { + log.info("Update referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + } + resultBuilder.addUpdateStatement(sql); + } + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> void onRevert(String referentialName, Class<R> type, Set<ReferentialSynchronizeTask<R>> tasks) { + + ReferentialBinderSupport<E, R> binder = binderEngine.getReferentialBinder(type); + TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); + Class<E> entityType = binderEngine.getReferentialEntityType(type); + + UpdateSqlStatementGenerator<R> updateGenerator = new UpdateSqlStatementGenerator<>(metadata, type); + List<E> updateEntities = loadEntities(entityType, tasks); + for (E entity : updateEntities) { + R referential = binder.toDto(referentialLocale, entity); + String sql = updateGenerator.generateSql(referential); + + if (log.isInfoEnabled()) { + log.info("Revert referential: " + type.getName() + " / " + referential.getId() + " -- " + sql); + } + resultBuilder.addUpdateStatement(sql); + } + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> void onDelete(String referentialName, Class<R> type, Set<ReferentialSynchronizeTask<R>> tasks) { + + TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); + + ReplaceSqlStatementGenerator<R> replaceGenerator = new ReplaceSqlStatementGenerator<>(metadataModel, referentialName); + DeleteSqlStatementGenerator<R> deleteGenerator = new DeleteSqlStatementGenerator<>(metadata); + + for (ReferentialSynchronizeTask<R> task : tasks) { + + String referentialId = task.getReferentialId(); + Optional<String> replaceReferentialId = task.getOptionalReplaceReferentialId(); + if (replaceReferentialId.isPresent()) { + String sql = computeReplaceRequestSql(type, replaceGenerator, referentialId, replaceReferentialId.get()); + resultBuilder.addDeleteStatement(sql); + } + String sql = deleteGenerator.generateSql(referentialId); + + if (log.isInfoEnabled()) { + log.info("Delete referential: " + type.getName() + " / " + referentialId + " -- " + sql); + } + resultBuilder.addDeleteStatement(sql); + } + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> void onDesactivate(String referentialName, + Class<R> type, + Set<ReferentialSynchronizeTask<R>> tasks) { + + TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); + + ReplaceSqlStatementGenerator<R> replaceGenerator = new ReplaceSqlStatementGenerator<>(metadataModel, referentialName); + DesactivateSqlStatementGenerator<R> desactivateGenerator = new DesactivateSqlStatementGenerator<>(metadata); + + for (ReferentialSynchronizeTask<R> task : tasks) { + String referentialId = task.getReferentialId(); + Optional<String> replaceReferentialId = task.getOptionalReplaceReferentialId(); + if (replaceReferentialId.isPresent()) { + String sql = computeReplaceRequestSql(type, replaceGenerator, referentialId, replaceReferentialId.get()); + resultBuilder.addDesactivateStatement(sql); + } + String sql = desactivateGenerator.generateSql(referentialId); + + if (log.isInfoEnabled()) { + log.info("Desactivate referential: " + type.getName() + " / " + referentialId + " -- " + sql); + } + resultBuilder.addDesactivateStatement(sql); + } + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> String computeReplaceRequestSql(Class<R> type, ReplaceSqlStatementGenerator replaceSqlStatementGenerator, String referentialId, String replaceReferentialId) { + + String sql = replaceSqlStatementGenerator.generateSql(referentialId, replaceReferentialId); + + if (log.isInfoEnabled()) { + log.info("Replace referential: " + type.getName() + " / " + referentialId + " -- " + sql); + } + + return sql; + + } + + private <R extends ReferentialDto, E extends ObserveReferentialEntity> List<E> loadEntities(Class<E> entityType, Set<ReferentialSynchronizeTask<R>> tasks) { + + Set<String> ids = tasks.stream().map(ReferentialSynchronizeTask::getReferentialId).collect(Collectors.toSet()); + return service.loadEntities(entityType, ids); + + } + +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.