Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 11392cc4 by tchemit at 2019-07-16T18:26:15Z Problème synchro avancée référentiel - Closes #1352 - - - - - 2 changed files: - services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java - services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java Changes: ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequestBuilder.java ===================================== @@ -22,8 +22,10 @@ package fr.ird.observe.services.local.service.actions.synchro.referential.ng; * #L% */ +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Multimap; import fr.ird.observe.binder.referential.ReferentialEntityDtoBinderSupport; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.referential.ReferentialDto; @@ -90,14 +92,17 @@ public class ReferentialSynchronizeSqlsRequestBuilder { ImmutableSet<Class<? extends ReferentialDtoReference>> types = request.getTypes(); + + Multimap<Class<? extends ReferentialDtoReference>, String> newIds = request.getNewIds(); + for (Class<? extends ReferentialDto> dtoType : DtoModelClasses.REFERENTIAL_TYPES) { - build0(dtoType, types); + build0(dtoType, types, newIds); } return resultBuilder.build(); } - private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void build0(Class<D> dtoType, ImmutableSet<Class<? extends ReferentialDtoReference>> types) { + private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void build0(Class<D> dtoType, ImmutableSet<Class<? extends ReferentialDtoReference>> types, Multimap<Class<? extends ReferentialDtoReference>, String> newIds) { ReferentialDtoEntityContext<D, R, E> modelContext = DbModelHelper.fromReferentialDto(dtoType); Class<R> referenceType = modelContext.toReferenceType(); @@ -117,13 +122,13 @@ public class ReferentialSynchronizeSqlsRequestBuilder { if (log.isInfoEnabled()) { log.info("Add: " + addTasks.size()); } - onAdd(referentialName, referenceType, addTasks, binder); + onAdd(referentialName, referenceType, addTasks, binder, newIds); Set<ReferentialSynchronizeTask<R>> updateTasks = request.getUpdateTasks(referenceType); if (log.isInfoEnabled()) { log.info("Update: " + updateTasks.size()); } - onUpdate(referentialName, referenceType, updateTasks, binder); + onUpdate(referentialName, referenceType, updateTasks, binder, newIds); Set<ReferentialSynchronizeTask<R>> revertTasks = request.getRevertTasks(referenceType); if (log.isInfoEnabled()) { @@ -145,7 +150,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder { } - private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onAdd(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder) { + private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onAdd(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder, Multimap<Class<? extends ReferentialDtoReference>, String> newIds) { Class<E> entityType = binder.getEntityType(); Class<D> dtoType = binder.getDtoType(); @@ -153,7 +158,9 @@ public class ReferentialSynchronizeSqlsRequestBuilder { List<E> insertEntities = loadEntities(entityType, tasks); if (metadata.withEntities()) { - InsertSqlWithCascadeStatementGenerator<D> insertGenerator = new InsertSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) { + Multimap<Class<? extends ReferentialDtoReference>, String> allIds = ArrayListMultimap.create(request.getIdsOnlyExistingOnThisSide()); + allIds.putAll(newIds); + InsertSqlWithCascadeStatementGenerator<D> insertGenerator = new InsertSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, allIds) { @Override protected <DD extends ReferentialDto> ImmutableList<String> insertMissingReferential(Class<DD> referentialType, String id) { @@ -188,7 +195,7 @@ public class ReferentialSynchronizeSqlsRequestBuilder { } - private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onUpdate(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder) { + private <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>, E extends ObserveReferentialEntity> void onUpdate(String referentialName, Class<R> referenceType, Set<ReferentialSynchronizeTask<R>> tasks, ReferentialEntityDtoBinderSupport<D, E> binder, Multimap<Class<? extends ReferentialDtoReference>, String> newIds) { Class<D> dtoType = binder.getDtoType(); TopiaMetadataEntity metadata = metadataModel.getEntity(referentialName); @@ -197,6 +204,10 @@ public class ReferentialSynchronizeSqlsRequestBuilder { if (metadata.withEntities()) { + + Multimap<Class<? extends ReferentialDtoReference>, String> allIds = ArrayListMultimap.create(request.getIdsOnlyExistingOnThisSide()); + allIds.putAll(newIds); + UpdateSqlWithCascadeStatementGenerator<D> updateGenerator = new UpdateSqlWithCascadeStatementGenerator<D>(metadataModel, metadata, dtoType, request.getIdsOnlyExistingOnThisSide()) { @Override ===================================== services/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java ===================================== @@ -71,6 +71,14 @@ public class ReferentialSynchronizeRequest implements ObserveDto { return idsOnlyExistingOnThisSide; } + public Multimap<Class<? extends ReferentialDtoReference>, String> getNewIds() { + Multimap<Class<? extends ReferentialDtoReference>, String> result = ArrayListMultimap.create(); + for (ReferentialSynchronizeTask<?> task : tasks.get(ReferentialSynchronizeTaskType.ADD)) { + result.put(task.getReferentialType(), task.getReferentialId()); + } + return result; + } + public ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> getTasks() { return tasks; } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/11392cc4e11628577527b4fe6b95... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/11392cc4e11628577527b4fe6b95... You're receiving this email because of your account on gitlab.com.