This is an automated email from the git hooks/post-receive script. New commit to branch feature/7739 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 1ab676f3d7736e84cfeca55934dfe4d3c06507d3 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jul 5 16:14:44 2016 +0200 Introduction d'un objet de résultat de la synchronisation + rendre le moteur de synchronisation Callable (See #7739) --- ...UnidirectionalReferentialSynchronizeEngine.java | 19 +++- ...UnidirectionalReferentialSynchronizeResult.java | 114 +++++++++++++++++++++ 2 files changed, 130 insertions(+), 3 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java index 031241d..83be8a9 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeEngine.java @@ -9,6 +9,7 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.Callable; import java.util.stream.Collectors; /** @@ -17,28 +18,36 @@ import java.util.stream.Collectors; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class UnidirectionalReferentialSynchronizeEngine { +public class UnidirectionalReferentialSynchronizeEngine implements Callable<UnidirectionalReferentialSynchronizeResult> { private final UnidirectionalReferentialSynchronizeLocalService localService; private final UnidirectionalReferentialSynchronizeRemoteService remoteService; + private final Callback callback; public UnidirectionalReferentialSynchronizeEngine(UnidirectionalReferentialSynchronizeLocalService localService, - UnidirectionalReferentialSynchronizeRemoteService remoteService) { + UnidirectionalReferentialSynchronizeRemoteService remoteService, + Callback callback) { this.localService = localService; this.remoteService = remoteService; + this.callback = callback; } - public void run(Callback callback) { + @Override + public UnidirectionalReferentialSynchronizeResult call() { LocalReferentialStates localReferentialStates = localService.getLocalSourceReferentialStates(); RemoteReferentialDiff remoteReferentialDiff = remoteService.getReferentialDifferential(localReferentialStates); + UnidirectionalReferentialSynchronizeResult result = new UnidirectionalReferentialSynchronizeResult(); + Set<String> sqlRequests = new LinkedHashSet<>(); for (String referentialName : remoteReferentialDiff.getReferentialNames()) { UnidirectionalReferentialSynchronizeRequest<?> referentialSynchronizeRequest = buildReferentialSynchronizeRequest(callback, referentialName, remoteReferentialDiff); + result.flushRequest(referentialSynchronizeRequest); + Set<String> sqlRequestsforReferential = localService.generateSqlRequests(referentialSynchronizeRequest); sqlRequests.addAll(sqlRequestsforReferential); @@ -46,6 +55,10 @@ public class UnidirectionalReferentialSynchronizeEngine { localService.applySqlRequests(sqlRequests); + //FIXME Mettre à jour la table LastUpdateDate pour les référentiels touchés et les données aussi... + + return result; + } private <R extends ReferentialDto> UnidirectionalReferentialSynchronizeRequest buildReferentialSynchronizeRequest(Callback callback, String referentialName, RemoteReferentialDiff remoteReferentialDiff) { diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeResult.java new file mode 100644 index 0000000..568d2bf --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeResult.java @@ -0,0 +1,114 @@ +package fr.ird.observe.services.service.actions.synchro; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import fr.ird.observe.services.dto.referential.ReferentialDto; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +/** + * Contient toutes les opérations réalisées lors de la synchronisation des référentiels. + * + * Created on 05/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class UnidirectionalReferentialSynchronizeResult { + + private final Set<String> referentialNames; + private final Multimap<String, String> referentialAdded; + private final Multimap<String, String> referentialUpdated; + private final Multimap<String, Pair<String, String>> referentialReplaced; + private final Multimap<String, String> referentialRemoved; + + public UnidirectionalReferentialSynchronizeResult() { + this.referentialNames = new TreeSet<>(); + this.referentialAdded = ArrayListMultimap.create(); + this.referentialUpdated = ArrayListMultimap.create(); + this.referentialReplaced = ArrayListMultimap.create(); + this.referentialRemoved = ArrayListMultimap.create(); + } + + public Set<String> getReferentialNames() { + return referentialNames; + } + + public Collection<String> getReferentialAdded(String referentialName) { + return referentialAdded.get(referentialName); + } + + public Collection<String> getReferentialUpdated(String referentialName) { + return referentialUpdated.get(referentialName); + } + + public Collection<Pair<String, String>> getReferentialReplaced(String referentialName) { + return referentialReplaced.get(referentialName); + } + + public Collection<String> getReferentialRemoved(String referentialName) { + return referentialRemoved.get(referentialName); + } + + void flushRequest(UnidirectionalReferentialSynchronizeRequest<?> referentialSynchronizeRequest) { + + String referentialName = referentialSynchronizeRequest.getReferentialName(); + + if (referentialSynchronizeRequest.withReferentialToAdd()) { + + for (ReferentialDto referentialDto : referentialSynchronizeRequest.getReferentialToAdd()) { + addReferentialAdded(referentialName, referentialDto.getId()); + } + + } + + if (referentialSynchronizeRequest.withReferentialToUpdate()) { + + for (ReferentialDto referentialDto : referentialSynchronizeRequest.getReferentialToUpdate()) { + addReferentialUpdated(referentialName, referentialDto.getId()); + } + + } + + if (referentialSynchronizeRequest.withReferentialToRemove()) { + + for (String id : referentialSynchronizeRequest.getReferentialToRemove()) { + addReferentialRemoved(referentialName, id); + } + + } + + if (referentialSynchronizeRequest.withReferentialToReplace()) { + + for (Map.Entry<String, String> entry : referentialSynchronizeRequest.getReferentialToReplace().entrySet()) { + addReferentialReplaced(referentialName, entry.getKey(), entry.getValue()); + } + + } + + } + + private void addReferentialAdded(String referentialName, String id) { + referentialNames.add(referentialName); + referentialAdded.put(referentialName, id); + } + + private void addReferentialUpdated(String referentialName, String id) { + referentialNames.add(referentialName); + referentialUpdated.put(referentialName, id); + } + + private void addReferentialRemoved(String referentialName, String id) { + referentialNames.add(referentialName); + referentialRemoved.put(referentialName, id); + } + + private void addReferentialReplaced(String referentialName, String idToReplace, String replaceId) { + referentialNames.add(referentialName); + referentialReplaced.put(referentialName, Pair.of(idToReplace, replaceId)); + } +} -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.