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 1ac48daab904e25b14728dba7f03c514348e3db6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jul 12 16:51:00 2016 +0200 Revue du code du moteur pour au final supprimer la notion de callback au niveau de celui-ci sinon au niveau applicatif ce n'est pas gérable (See #7739) --- ...idirectionalReferentialSynchronizeCallback.java | 17 ---------- ...tionalReferentialSynchronizeCallbackResult.java | 16 ++++++---- ...ionalReferentialSynchronizeCallbackResults.java | 12 ++++--- ...nidirectionalReferentialSynchronizeContext.java | 33 +++++++++++++++++++ ...UnidirectionalReferentialSynchronizeEngine.java | 37 ++++++++++------------ ...UnidirectionalReferentialSynchronizeResult.java | 4 +++ .../UnidirectionalSynchronizeReferentialTest.java | 30 +++++++----------- 7 files changed, 83 insertions(+), 66 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallback.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallback.java deleted file mode 100644 index 638a983..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallback.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro; - -/** - * Le call back utilisateur pour lui permettre d'effectuer les remplacements sur les référentiels qui posent problèmes. - * - * Pour le moment on ne traite ici que les référentiels supprimés à distance et utilisés dans des données locales. - * - * Created on 12/07/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public interface UnidirectionalReferentialSynchronizeCallback { - - UnidirectionalReferentialSynchronizeCallbackResults askUserToReplaceRemovedReferentials(UnidirectionalReferentialSynchronizeCallbackRequests request); - -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResult.java index fe49053..989b98d 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResult.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResult.java @@ -1,8 +1,7 @@ package fr.ird.observe.services.service.actions.synchro; -import com.google.common.collect.ImmutableMap; - import java.util.Map; +import java.util.TreeMap; /** * Contient les résultats du call back utilisateur pour un type de référentiel donné. @@ -15,19 +14,24 @@ import java.util.Map; public class UnidirectionalReferentialSynchronizeCallbackResult { private final String referentialName; - private final ImmutableMap<String, String> ids; + private final Map<String, String> ids = new TreeMap<>(); public String getReferentialName() { return referentialName; } - public ImmutableMap<String, String> getIds() { + public Map<String, String> getIds() { return ids; } - UnidirectionalReferentialSynchronizeCallbackResult(String referentialName, Map<String, String> ids) { + void addId(String idToReplace, String replaceId) { + ids.put(idToReplace, replaceId); + } + + UnidirectionalReferentialSynchronizeCallbackResult(String referentialName) { this.referentialName = referentialName; - this.ids = ImmutableMap.copyOf(ids); } + + } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResults.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResults.java index 52fcce0..c2b5535 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResults.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeCallbackResults.java @@ -19,11 +19,13 @@ public class UnidirectionalReferentialSynchronizeCallbackResults { callbackResults = new LinkedHashMap<>(); } - public void addCallbackResult(String referentialName, Map<String, String> ids) { - - UnidirectionalReferentialSynchronizeCallbackResult callbackResult = new UnidirectionalReferentialSynchronizeCallbackResult(referentialName, ids); - callbackResults.put(callbackResult.getReferentialName(), callbackResult); - + public void addCallbackResult(String referentialName, String idtoReplace, String replaceId) { + UnidirectionalReferentialSynchronizeCallbackResult callbackResult = getCallbackResult(referentialName); + if (callbackResult == null) { + callbackResult = new UnidirectionalReferentialSynchronizeCallbackResult(referentialName); + callbackResults.put(referentialName, callbackResult); + } + callbackResult.addId(idtoReplace, replaceId); } public UnidirectionalReferentialSynchronizeCallbackResult getCallbackResult(String referentialName) { diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeContext.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeContext.java new file mode 100644 index 0000000..5e9c0b7 --- /dev/null +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalReferentialSynchronizeContext.java @@ -0,0 +1,33 @@ +package fr.ird.observe.services.service.actions.synchro; + +import com.google.common.collect.ImmutableSet; + +/** + * Created on 12/07/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 5.0 + */ +public class UnidirectionalReferentialSynchronizeContext { + + private final ImmutableSet<UnidirectionalReferentialSynchronizeRequest.Builder<?>> referentialSynchronizeRequestBuilders; + private final UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests; + + public UnidirectionalReferentialSynchronizeContext(ImmutableSet<UnidirectionalReferentialSynchronizeRequest.Builder<?>> referentialSynchronizeRequestBuilders, UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests) { + this.referentialSynchronizeRequestBuilders = referentialSynchronizeRequestBuilders; + this.callbackRequests = callbackRequests; + } + + + public ImmutableSet<UnidirectionalReferentialSynchronizeRequest.Builder<?>> getReferentialSynchronizeRequestBuilders() { + return referentialSynchronizeRequestBuilders; + } + + public UnidirectionalReferentialSynchronizeCallbackRequests getCallbackRequests() { + return callbackRequests; + } + + public boolean isNeedCallback() { + return callbackRequests.isNotEmpty(); + } +} 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 3ec6089..7cb3bd8 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 @@ -1,5 +1,6 @@ package fr.ird.observe.services.service.actions.synchro; +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.dto.referential.ReferentialReferenceSet; @@ -9,7 +10,6 @@ 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; /** @@ -18,34 +18,26 @@ import java.util.stream.Collectors; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class UnidirectionalReferentialSynchronizeEngine implements Callable<UnidirectionalReferentialSynchronizeResult> { +public class UnidirectionalReferentialSynchronizeEngine { private final UnidirectionalReferentialSynchronizeLocalService localService; private final UnidirectionalReferentialSynchronizeRemoteService remoteService; - private final UnidirectionalReferentialSynchronizeCallback callback; public UnidirectionalReferentialSynchronizeEngine(UnidirectionalReferentialSynchronizeLocalService localService, - UnidirectionalReferentialSynchronizeRemoteService remoteService, - UnidirectionalReferentialSynchronizeCallback callback) { + UnidirectionalReferentialSynchronizeRemoteService remoteService) { this.localService = localService; this.remoteService = remoteService; - this.callback = callback; } - @Override - public UnidirectionalReferentialSynchronizeResult call() { + public UnidirectionalReferentialSynchronizeContext prepareContext() { LocalReferentialStates localReferentialStates = localService.getLocalSourceReferentialStates(); RemoteReferentialDiff remoteReferentialDiff = remoteService.getReferentialDifferential(localReferentialStates); - UnidirectionalReferentialSynchronizeResult result = new UnidirectionalReferentialSynchronizeResult(); - - - Set<UnidirectionalReferentialSynchronizeRequest.Builder<?>> referentialSynchronizeRequestBuilders = new LinkedHashSet<>(); + ImmutableSet.Builder<UnidirectionalReferentialSynchronizeRequest.Builder<?>> referentialSynchronizeRequestBuilders = ImmutableSet.builder(); UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests = new UnidirectionalReferentialSynchronizeCallbackRequests(); - // Première étape pour construire les builder de requète et calculer au passage les ids à faire remplacer // par l'utilisateur @@ -58,21 +50,26 @@ public class UnidirectionalReferentialSynchronizeEngine implements Callable<Unid } - boolean needCallback = callbackRequests.isNotEmpty(); + UnidirectionalReferentialSynchronizeContext context = new UnidirectionalReferentialSynchronizeContext( + referentialSynchronizeRequestBuilders.build(), + callbackRequests + ); - UnidirectionalReferentialSynchronizeCallbackResults callbackResults = null; + return context; - if (needCallback) { + } - callbackResults = callback.askUserToReplaceRemovedReferentials(callbackRequests); + public UnidirectionalReferentialSynchronizeResult finish(UnidirectionalReferentialSynchronizeContext context, UnidirectionalReferentialSynchronizeCallbackResults callbackResults) { - } + UnidirectionalReferentialSynchronizeResult result = new UnidirectionalReferentialSynchronizeResult(); Set<String> sqlRequests = new LinkedHashSet<>(); // Second étape pour terminer la construction des builders de requètes et générer le code sql - for (UnidirectionalReferentialSynchronizeRequest.Builder<?> referentialSynchronizeRequestBuilder : referentialSynchronizeRequestBuilders) { + boolean needCallback = callbackResults != null; + + for (UnidirectionalReferentialSynchronizeRequest.Builder<?> referentialSynchronizeRequestBuilder : context.getReferentialSynchronizeRequestBuilders()) { String referentialName = referentialSynchronizeRequestBuilder.getReferentialName(); @@ -146,7 +143,7 @@ public class UnidirectionalReferentialSynchronizeEngine implements Callable<Unid Set<ReferentialReference<R>> availableReferentials = availableReferenceSet.getReferences(); Set<ReferentialReference<R>> blockingReferentialsToRemove = localService.getLocalSourceReferentialToDelete(referentialName, blockingIdsToRemove); - + callbackRequests.addCallbackRequest(referentialName, blockingReferentialsToRemove, availableReferentials); } 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 index 568d2bf..12b5e03 100644 --- 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 @@ -34,6 +34,10 @@ public class UnidirectionalReferentialSynchronizeResult { this.referentialRemoved = ArrayListMultimap.create(); } + public boolean isEmpty() { + return referentialNames.isEmpty(); + } + public Set<String> getReferentialNames() { return referentialNames; } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java index a293ebe..0bdb0c0 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/actions/synchro/UnidirectionalSynchronizeReferentialTest.java @@ -1,6 +1,5 @@ package fr.ird.observe.services.service.actions.synchro; -import com.google.common.collect.ImmutableMap; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.entities.Entities; import fr.ird.observe.services.ApplicationContextResource; @@ -51,11 +50,9 @@ public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTop @Test public void testSynchronizeFromEmptyDatabase() { - UnidirectionalReferentialSynchronizeCallback callback = request -> { - throw new IllegalStateException(); - }; - UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService, callback); - UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.call(); + UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(); + UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.finish(unidirectionalReferentialSynchronizeContext, null); Assert.assertNotNull(result); Set<String> referentialNames = result.getReferentialNames(); @@ -83,11 +80,9 @@ public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTop @Test public void testSynchronizeWithNochange() { - UnidirectionalReferentialSynchronizeCallback callback = request -> { - throw new IllegalStateException(); - }; - UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService, callback); - UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.call(); + UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(); + UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.finish(unidirectionalReferentialSynchronizeContext, null); Assert.assertNotNull(result); Set<String> referentialNames = result.getReferentialNames(); @@ -113,16 +108,15 @@ public class UnidirectionalSynchronizeReferentialTest extends AbstractServiceTop @Test public void testSynchronizeWithAllChanges() { - UnidirectionalReferentialSynchronizeCallback callback = request -> { - UnidirectionalReferentialSynchronizeCallbackResults results = new UnidirectionalReferentialSynchronizeCallbackResults(); - results.addCallbackResult(ObserveEntityEnum.Person.name(), ImmutableMap.<String, String>builder().put("fr.ird.observe.entities.referentiel.Person#1355399844272#0.32586441962131485", "fr.ird.observe.entities.referentiel.Person#1429515754659#0.322074382333085").build()); - return results; - }; + UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService); + UnidirectionalReferentialSynchronizeContext unidirectionalReferentialSynchronizeContext = referentialSynchronizeEngine.prepareContext(); - UnidirectionalReferentialSynchronizeEngine referentialSynchronizeEngine = new UnidirectionalReferentialSynchronizeEngine(localService, remoteService, callback); - UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.call(); + UnidirectionalReferentialSynchronizeCallbackResults results = new UnidirectionalReferentialSynchronizeCallbackResults(); + results.addCallbackResult(ObserveEntityEnum.Person.name(), "fr.ird.observe.entities.referentiel.Person#1355399844272#0.32586441962131485", "fr.ird.observe.entities.referentiel.Person#1429515754659#0.322074382333085"); + + UnidirectionalReferentialSynchronizeResult result = referentialSynchronizeEngine.finish(unidirectionalReferentialSynchronizeContext, results); Assert.assertNotNull(result); Set<String> referentialNames = result.getReferentialNames(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.