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 df9fb923a3729326854188ae64618c4c6db60d1a Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Aug 17 13:38:56 2016 +0200 Utilisation du nouveau moteur de calcul de différentiel pour la synchro référentiel simple --- .../fr/ird/observe/db/ObserveSwingDataSource.java | 6 - ...eferentialSynchronizeDiffServiceController.java | 5 + ...ferentialSynchronizeLocalServiceController.java | 10 +- ...erentialSynchronizeRemoteServiceController.java | 52 -------- .../observe/services/ObserveServicesProvider.java | 3 - .../diff/ReferentialSynchronizeDiffService.java | 3 + .../diff/ReferentialSynchronizeDiffsEngine.java | 10 ++ .../referential/legacy/LocalReferentialStates.java | 95 ------------- .../referential/legacy/RemoteReferentialDiff.java | 106 --------------- ...ionalReferentialSynchronizeCallbackRequest.java | 6 +- ...onalReferentialSynchronizeCallbackRequests.java | 12 +- ...tionalReferentialSynchronizeCallbackResult.java | 10 +- ...ionalReferentialSynchronizeCallbackResults.java | 14 +- ...UnidirectionalReferentialSynchronizeEngine.java | 98 +++++++++----- ...ectionalReferentialSynchronizeLocalService.java | 19 +-- ...ctionalReferentialSynchronizeRemoteService.java | 58 -------- ...nidirectionalReferentialSynchronizeRequest.java | 19 +-- ...UnidirectionalReferentialSynchronizeResult.java | 34 ++--- .../ReferentialSynchronizeDiffServiceTopia.java | 20 +++ ...nalReferentialSynchronizeLocalServiceTopia.java | 60 ++------- ...alReferentialSynchronizeRemoteServiceTopia.java | 147 --------------------- .../sql/InsertSqlStatementGenerator.java | 4 +- 22 files changed, 173 insertions(+), 618 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java index 861d6dc..c6ab886 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java @@ -65,7 +65,6 @@ import fr.ird.observe.services.service.actions.report.ReportService; import fr.ird.observe.services.service.actions.synchro.data.DataSynchronizeService; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; -import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRemoteService; import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeService; import fr.ird.observe.services.service.actions.validate.ValidateService; import fr.ird.observe.services.service.longline.ActivityLongLineEncounterService; @@ -573,11 +572,6 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements } @Override - public UnidirectionalReferentialSynchronizeRemoteService newUnidirectionalReferentialSynchronizeRemoteService() { - return newService(UnidirectionalReferentialSynchronizeRemoteService.class); - } - - @Override public DataSynchronizeService newDataSynchronizeService() { return newService(DataSynchronizeService.class); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceController.java index 97041b6..e8ff987 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceController.java @@ -28,6 +28,11 @@ public class ReferentialSynchronizeDiffServiceController extends ObserveAuthenti } @Override + public <R extends ReferentialDto> ImmutableSet<R> getReferentials(Class<R> referentialName, ImmutableSet<String> ids) { + return service.getReferentials(referentialName, ids); + } + + @Override public ReferentialDataSourceStates getSourceReferentialStates() { return service.getSourceReferentialStates(); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java index dc0107b..f8c07da 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceController.java @@ -25,7 +25,6 @@ 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.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; -import fr.ird.observe.services.service.actions.synchro.referential.legacy.LocalReferentialStates; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRequest; @@ -43,17 +42,12 @@ public class UnidirectionalReferentialSynchronizeLocalServiceController extends } @Override - public LocalReferentialStates getLocalSourceReferentialStates() { - return getAuthenticatedService().getLocalSourceReferentialStates(); - } - - @Override - public Set<String> filterIdsUsedInLocalSource(String referentialName, Set<String> ids) { + public <R extends ReferentialDto>Set<String> filterIdsUsedInLocalSource(Class<R> referentialName, Set<String> ids) { return getAuthenticatedService().filterIdsUsedInLocalSource(referentialName, ids); } @Override - public <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(String referentialName, Set<String> ids) { + public <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(Class<R> referentialName, Set<String> ids) { return getAuthenticatedService().getLocalSourceReferentialToDelete(referentialName, ids); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteServiceController.java deleted file mode 100644 index 0d451fd..0000000 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteServiceController.java +++ /dev/null @@ -1,52 +0,0 @@ -package fr.ird.observe.application.web.controller.v1.actions.synchro.referential.legacy; - -/*- - * #%L - * ObServe :: Application Web - * %% - * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.application.web.controller.v1.ObserveAuthenticatedServiceControllerSupport; -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; -import fr.ird.observe.services.service.actions.synchro.referential.legacy.LocalReferentialStates; -import fr.ird.observe.services.service.actions.synchro.referential.legacy.RemoteReferentialDiff; -import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRemoteService; - -/** - * Created on 20/07/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class UnidirectionalReferentialSynchronizeRemoteServiceController extends ObserveAuthenticatedServiceControllerSupport<UnidirectionalReferentialSynchronizeRemoteService> implements UnidirectionalReferentialSynchronizeRemoteService { - - public UnidirectionalReferentialSynchronizeRemoteServiceController() { - super(UnidirectionalReferentialSynchronizeRemoteService.class); - } - - @Override - public RemoteReferentialDiff getReferentialDifferential(LocalReferentialStates localReferentialStates) { - return getAuthenticatedService().getReferentialDifferential(localReferentialStates); - } - - @Override - public <R extends ReferentialDto> ReferentialReferenceSet<R> getEnabledReferentialReferenceSet(String referentialName) { - return getAuthenticatedService().getEnabledReferentialReferenceSet(referentialName); - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java index f349807..28d28e2 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesProvider.java @@ -10,7 +10,6 @@ import fr.ird.observe.services.service.actions.report.ReportService; import fr.ird.observe.services.service.actions.synchro.data.DataSynchronizeService; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffService; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeLocalService; -import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRemoteService; import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeService; import fr.ird.observe.services.service.actions.validate.ValidateService; import fr.ird.observe.services.service.longline.ActivityLongLineEncounterService; @@ -64,8 +63,6 @@ public interface ObserveServicesProvider { UnidirectionalReferentialSynchronizeLocalService newUnidirectionalReferentialSynchronizeLocalService(); - UnidirectionalReferentialSynchronizeRemoteService newUnidirectionalReferentialSynchronizeRemoteService(); - DataSynchronizeService newDataSynchronizeService(); ReferentialSynchronizeService newReferentialSynchronizeService(); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffService.java index 381dd84..406f5d3 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffService.java @@ -19,6 +19,9 @@ public interface ReferentialSynchronizeDiffService extends ObserveService { @ReadReferentialPermission <R extends ReferentialDto> ReferentialReferenceSet<R> getReferentialReferenceSet(Class<R> referentialName, ImmutableSet<String> ids); + @ReadReferentialPermission + <R extends ReferentialDto> ImmutableSet<R> getReferentials(Class<R> referentialName, ImmutableSet<String> ids); + /** * Récupération sur la source à synchroniser des versions de ses référentiels. * diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffsEngine.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffsEngine.java index bbfc4d3..afcee38 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffsEngine.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffsEngine.java @@ -54,6 +54,16 @@ public class ReferentialSynchronizeDiffsEngine { return rightDiffService.getReferentialReferenceSet(referentialName, ImmutableSet.copyOf(ids)); } + public <R extends ReferentialDto> ImmutableSet<R> getLeftReferentials(Class<R> referentialName, ImmutableSet<ReferentialSynchronizeDiffState> diffStates) { + Set<String> ids = diffStates.stream().map(ReferentialSynchronizeDiffState::getId).collect(Collectors.toSet()); + return leftDiffService.getReferentials(referentialName, ImmutableSet.copyOf(ids)); + } + + public <R extends ReferentialDto> ImmutableSet<R> getRightReferentials(Class<R> referentialName, ImmutableSet<ReferentialSynchronizeDiffState> diffStates) { + Set<String> ids = diffStates.stream().map(ReferentialSynchronizeDiffState::getId).collect(Collectors.toSet()); + return rightDiffService.getReferentials(referentialName, ImmutableSet.copyOf(ids)); + } + public <R extends ReferentialDto> ReferentialReferenceSet<R> getLeftEnabledReferentialReferenceSet(Class<R> referentialName) { return leftDiffService.getEnabledReferentialReferenceSet(referentialName); } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/LocalReferentialStates.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/LocalReferentialStates.java deleted file mode 100644 index 6cdf58a..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/LocalReferentialStates.java +++ /dev/null @@ -1,95 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.legacy; - -/*- - * #%L - * ObServe :: Services API - * %% - * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; - -import java.io.Serializable; -import java.util.Collection; -import java.util.Map; -import java.util.TreeMap; - -/** - * Contient les états des référentiels de la source locale à synchroniser. - * - * Created on 27/06/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class LocalReferentialStates implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * Contient pour chaque type de référentiel la version de chaque référentiel indexé par son nom. - */ - private final Map<String, Map<String, Long>> referentialVersionsByType; - - /** - * Contient la liste des identifiants des référentiels désactivés indexé par son nom. - */ - private final Multimap<String, String> referentialDisabledIdsByType; - - public LocalReferentialStates() { - this.referentialVersionsByType = new TreeMap<>(); - this.referentialDisabledIdsByType = ArrayListMultimap.create(); - } - - /** - * @param referentialName le nom de référentiel - * @return la collection des versions de référentiel du nom demandé. - */ - public Map<String, Long> getReferentialVersions(String referentialName) { - return referentialVersionsByType.get(referentialName); - } - - /** - * @param referentialName le nom de référentiel - * @return la collection des identifiants de référentiel désactivés du nom demandé. - */ - public Collection<String> getReferentialDisabled(String referentialName) { - return referentialDisabledIdsByType.get(referentialName); - } - - /** - * Pour ajouter un référentiel. - * - * @param referentialName le nom du référentiel - * @param id l'identifiant du référentiel à ajouter - * @param version la version du référentiel à ajouter - * @param disabled {@code true} si le référentiel est désactivé - */ - void addReferentialVersion(String referentialName, String id, long version, boolean disabled) { - Map<String, Long> map = referentialVersionsByType.get(referentialName); - if (map == null) { - map = new TreeMap<>(); - referentialVersionsByType.put(referentialName, map); - } - map.put(id, version); - if (disabled) { - referentialDisabledIdsByType.put(referentialName, id); - } - } -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/RemoteReferentialDiff.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/RemoteReferentialDiff.java deleted file mode 100644 index 88fa8aa..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/RemoteReferentialDiff.java +++ /dev/null @@ -1,106 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.legacy; - -/*- - * #%L - * ObServe :: Services API - * %% - * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; -import fr.ird.observe.services.dto.referential.ReferentialDto; - -import java.io.Serializable; -import java.util.Collection; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.Set; - -/** - * Contient le différentiel de référentiels calculé sur la source centrale à partir des états de la source à synchroniser. - * - * Created on 27/06/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class RemoteReferentialDiff implements Serializable { - - private static final long serialVersionUID = 1L; - - private final Set<String> referentialNames; - /** - * Les référentiels à ajouter (indexé par nom de référentiel). - */ - private final Multimap<String, ReferentialDto> referentialsToAdd; - /** - * Les référentiels à mettre à jour (indexé par nom de référentiel). - */ - private final Multimap<String, ReferentialDto> referentialsToUpdate; - /** - * Les identifiants de référentiels à supprimer (indexé par nom de référentiel). - */ - private final Multimap<String, String> referentialsToRemove; - - public RemoteReferentialDiff() { - referentialNames = new LinkedHashSet<>(); - referentialsToAdd = ArrayListMultimap.create(); - referentialsToUpdate = ArrayListMultimap.create(); - referentialsToRemove = ArrayListMultimap.create(); - } - - public boolean isReferentialUsed(String referentialName) { - return referentialsToAdd.containsKey(referentialName) - || referentialsToUpdate.containsKey(referentialName) - || referentialsToRemove.containsKey(referentialName); - - } - - public <R extends ReferentialDto> Collection<R> getReferentialsToAdd(String referentialName) { - return (Collection) referentialsToAdd.get(referentialName); - } - - public <R extends ReferentialDto> Collection<R> getReferentialsToUpdate(String referentialName) { - return (Collection) referentialsToUpdate.get(referentialName); - } - - public Set<String> getReferentialsToRemove(String referentialName) { - return new HashSet<>(referentialsToRemove.get(referentialName)); - } - - public Set<String> getReferentialNames() { - return referentialNames; - } - - void addReferentialToAdd(String referentialName, ReferentialDto referentialDto) { - referentialNames.add(referentialName); - referentialsToAdd.put(referentialName, referentialDto); - } - - void addReferentialToUpdate(String referentialName, ReferentialDto referentialDto) { - referentialNames.add(referentialName); - referentialsToUpdate.put(referentialName, referentialDto); - } - - void addReferentialToDelete(String referentialName, String id) { - referentialNames.add(referentialName); - referentialsToRemove.put(referentialName, id); - } - -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequest.java index 359da72..0b0376b 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequest.java @@ -38,11 +38,11 @@ import java.util.Collection; */ public class UnidirectionalReferentialSynchronizeCallbackRequest<R extends ReferentialDto> { - private final String referentialName; + private final Class<R> referentialName; private final ImmutableSet<ReferentialReference<R>> referentialsToReplace; private final ImmutableSet<ReferentialReference<R>> availableReferentials; - public String getReferentialName() { + public Class<R> getReferentialName() { return referentialName; } @@ -54,7 +54,7 @@ public class UnidirectionalReferentialSynchronizeCallbackRequest<R extends Refer return availableReferentials; } - UnidirectionalReferentialSynchronizeCallbackRequest(String referentialName, + UnidirectionalReferentialSynchronizeCallbackRequest(Class<R> referentialName, Collection<ReferentialReference<R>> referentialsToReplace, Collection<ReferentialReference<R>> availableReferentials) { this.referentialName = referentialName; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequests.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequests.java index fa507aa..c4dda9d 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequests.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackRequests.java @@ -26,9 +26,9 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import java.util.Collection; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import java.util.TreeMap; /** * Représente l'ensemble des demandes au call back utilisateur. @@ -40,13 +40,13 @@ import java.util.TreeMap; */ public class UnidirectionalReferentialSynchronizeCallbackRequests implements Iterable<UnidirectionalReferentialSynchronizeCallbackRequest<?>> { - private final Map<String, UnidirectionalReferentialSynchronizeCallbackRequest<?>> callbackRequests; + private final Map<Class<? extends ReferentialDto>, UnidirectionalReferentialSynchronizeCallbackRequest<?>> callbackRequests; public UnidirectionalReferentialSynchronizeCallbackRequests() { - this.callbackRequests = new TreeMap<>(); + this.callbackRequests = new HashMap<>(); } - public <R extends ReferentialDto> void addCallbackRequest(String referentialName, + public <R extends ReferentialDto> void addCallbackRequest(Class<R> referentialName, Collection<ReferentialReference<R>> referentialsToReplace, Collection<ReferentialReference<R>> availableReferentials) { @@ -54,8 +54,8 @@ public class UnidirectionalReferentialSynchronizeCallbackRequests implements Ite callbackRequests.put(referentialName, callbackRequest); } - public UnidirectionalReferentialSynchronizeCallbackRequest<?> getCallbackRequest(String referentialName) { - return callbackRequests.get(referentialName); + public <R extends ReferentialDto> UnidirectionalReferentialSynchronizeCallbackRequest<R> getCallbackRequest(Class<R> referentialName) { + return (UnidirectionalReferentialSynchronizeCallbackRequest) callbackRequests.get(referentialName); } public boolean isNotEmpty() { diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResult.java index 3961ba8..9c17fcc 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResult.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResult.java @@ -22,6 +22,8 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; * #L% */ +import fr.ird.observe.services.dto.referential.ReferentialDto; + import java.util.Map; import java.util.TreeMap; @@ -33,12 +35,12 @@ import java.util.TreeMap; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class UnidirectionalReferentialSynchronizeCallbackResult { +public class UnidirectionalReferentialSynchronizeCallbackResult<R extends ReferentialDto> { - private final String referentialName; + private final Class<R> referentialName; private final Map<String, String> ids = new TreeMap<>(); - public String getReferentialName() { + public Class<R> getReferentialName() { return referentialName; } @@ -50,7 +52,7 @@ public class UnidirectionalReferentialSynchronizeCallbackResult { ids.put(idToReplace, replaceId); } - UnidirectionalReferentialSynchronizeCallbackResult(String referentialName) { + UnidirectionalReferentialSynchronizeCallbackResult(Class<R> referentialName) { this.referentialName = referentialName; } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResults.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResults.java index d3f00c4..1a7ad3d 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResults.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeCallbackResults.java @@ -22,6 +22,8 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; * #L% */ +import fr.ird.observe.services.dto.referential.ReferentialDto; + import java.util.LinkedHashMap; import java.util.Map; @@ -35,26 +37,26 @@ import java.util.Map; */ public class UnidirectionalReferentialSynchronizeCallbackResults { - private final Map<String, UnidirectionalReferentialSynchronizeCallbackResult> callbackResults; + private final Map<Class<? extends ReferentialDto>, UnidirectionalReferentialSynchronizeCallbackResult> callbackResults; public UnidirectionalReferentialSynchronizeCallbackResults() { callbackResults = new LinkedHashMap<>(); } - public void addCallbackResult(String referentialName, String idtoReplace, String replaceId) { - UnidirectionalReferentialSynchronizeCallbackResult callbackResult = getCallbackResult(referentialName); + public <R extends ReferentialDto> void addCallbackResult(Class<R> referentialName, String idtoReplace, String replaceId) { + UnidirectionalReferentialSynchronizeCallbackResult<R> callbackResult = getCallbackResult(referentialName); if (callbackResult == null) { - callbackResult = new UnidirectionalReferentialSynchronizeCallbackResult(referentialName); + callbackResult = new UnidirectionalReferentialSynchronizeCallbackResult<>(referentialName); callbackResults.put(referentialName, callbackResult); } callbackResult.addId(idtoReplace, replaceId); } - public UnidirectionalReferentialSynchronizeCallbackResult getCallbackResult(String referentialName) { + public <R extends ReferentialDto> UnidirectionalReferentialSynchronizeCallbackResult<R> getCallbackResult(Class<R> referentialName) { return callbackResults.get(referentialName); } - public boolean containsReferentialName(String referentialName) { + public <R extends ReferentialDto> boolean containsReferentialName(Class<R> referentialName) { return callbackResults.containsKey(referentialName); } } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java index 8689492..aca3954 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeEngine.java @@ -26,11 +26,15 @@ 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; +import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiff; +import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffState; +import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffs; +import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine; import org.apache.commons.collections4.CollectionUtils; -import java.util.Collection; import java.util.LinkedHashSet; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -43,18 +47,18 @@ import java.util.stream.Collectors; public class UnidirectionalReferentialSynchronizeEngine { private final UnidirectionalReferentialSynchronizeLocalService localService; - private final UnidirectionalReferentialSynchronizeRemoteService remoteService; - public UnidirectionalReferentialSynchronizeEngine(UnidirectionalReferentialSynchronizeLocalService localService, - UnidirectionalReferentialSynchronizeRemoteService remoteService) { + private final ReferentialSynchronizeDiffsEngine diffsEngine; + + public UnidirectionalReferentialSynchronizeEngine(ReferentialSynchronizeDiffsEngine diffsEngine, + UnidirectionalReferentialSynchronizeLocalService localService) { + this.diffsEngine = diffsEngine; this.localService = localService; - this.remoteService = remoteService; } public UnidirectionalReferentialSynchronizeContext prepareContext() { - LocalReferentialStates localReferentialStates = localService.getLocalSourceReferentialStates(); - RemoteReferentialDiff remoteReferentialDiff = remoteService.getReferentialDifferential(localReferentialStates); + ReferentialSynchronizeDiffs synchronizeDiffs = diffsEngine.build(); ImmutableSet.Builder<UnidirectionalReferentialSynchronizeRequest.Builder<?>> referentialSynchronizeRequestBuilders = ImmutableSet.builder(); @@ -63,12 +67,15 @@ public class UnidirectionalReferentialSynchronizeEngine { // Première étape pour construire les builder de requète et calculer au passage les ids à faire remplacer // par l'utilisateur - for (String referentialName : remoteReferentialDiff.getReferentialNames()) { + ReferentialSynchronizeDiff localDiff = synchronizeDiffs.getLeftDiff(); + ReferentialSynchronizeDiff centralDiff = synchronizeDiffs.getRightDiff(); + + for (Class<? extends ReferentialDto> referentialName : synchronizeDiffs.getReferentialNames()) { - UnidirectionalReferentialSynchronizeRequest.Builder<?> referentialSynchronizeRequestBuilder = - computeReferentialSynchronizeRequestBuilder(referentialName, remoteReferentialDiff, callbackRequests); + UnidirectionalReferentialSynchronizeRequest.Builder<?> builder = computeReferentialSynchronizeRequestBuilder( + referentialName, synchronizeDiffs, callbackRequests); - referentialSynchronizeRequestBuilders.add(referentialSynchronizeRequestBuilder); + referentialSynchronizeRequestBuilders.add(builder); } @@ -93,7 +100,7 @@ public class UnidirectionalReferentialSynchronizeEngine { for (UnidirectionalReferentialSynchronizeRequest.Builder<?> referentialSynchronizeRequestBuilder : context.getReferentialSynchronizeRequestBuilders()) { - String referentialName = referentialSynchronizeRequestBuilder.getReferentialName(); + Class<? extends ReferentialDto> referentialName = referentialSynchronizeRequestBuilder.getReferentialName(); if (needCallback && callbackResults.containsReferentialName(referentialName)) { @@ -133,48 +140,67 @@ public class UnidirectionalReferentialSynchronizeEngine { } - private <R extends ReferentialDto> UnidirectionalReferentialSynchronizeRequest.Builder<R> computeReferentialSynchronizeRequestBuilder(String referentialName, RemoteReferentialDiff remoteReferentialDiff, UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests) { + private <R extends ReferentialDto> UnidirectionalReferentialSynchronizeRequest.Builder<R> computeReferentialSynchronizeRequestBuilder(Class<R> referentialName, + ReferentialSynchronizeDiffs diffs, + UnidirectionalReferentialSynchronizeCallbackRequests callbackRequests) { UnidirectionalReferentialSynchronizeRequest.Builder<R> builder = UnidirectionalReferentialSynchronizeRequest.builder(referentialName); - Collection<R> referentialsToAdd = remoteReferentialDiff.getReferentialsToAdd(referentialName); - if (CollectionUtils.isNotEmpty(referentialsToAdd)) { - referentialsToAdd.forEach(builder::entityToAdd); + // Tous les référentiels ajoutés sur la base centrale doivent être copié en local + Optional<ImmutableSet<ReferentialSynchronizeDiffState>> optionalAddDiffStates = diffs.getRightAddedReferentials(referentialName); + if (optionalAddDiffStates.isPresent()) { + + ImmutableSet<ReferentialSynchronizeDiffState> referentialSynchronizeDiffStates = optionalAddDiffStates.get(); + ImmutableSet<R> referentials = diffsEngine.getRightReferentials(referentialName, referentialSynchronizeDiffStates); + referentials.forEach(builder::entityToAdd); } - Collection<R> referentialsToUpdate = remoteReferentialDiff.getReferentialsToUpdate(referentialName); - if (CollectionUtils.isNotEmpty(referentialsToUpdate)) { - referentialsToUpdate.forEach(builder::entityToUpdate); + // Tous les référentiels mises à jour dans la base centrale doivent être copié en local + Optional<ImmutableSet<ReferentialSynchronizeDiffState>> optionalUpdateDiffStates = diffs.getRightUpdatedReferentials(referentialName); + if (optionalUpdateDiffStates.isPresent()) { + + ImmutableSet<ReferentialSynchronizeDiffState> referentialSynchronizeDiffStates = optionalUpdateDiffStates.get(); + ImmutableSet<R> referentials = diffsEngine.getRightReferentials(referentialName, referentialSynchronizeDiffStates); + referentials.forEach(builder::entityToUpdate); } - Set<String> idsToRemove = remoteReferentialDiff.getReferentialsToRemove(referentialName); - Set<String> blockingIdsToRemove = null; + // Tous les référentiels non présents dans la base centrale doivent être supprimés en local + Optional<ImmutableSet<ReferentialSynchronizeDiffState>> optionalRemoveDiffStates = diffs.getLeftAddedReferentials(referentialName); + if (optionalRemoveDiffStates.isPresent()) { - if (CollectionUtils.isNotEmpty(idsToRemove)) { + ImmutableSet<ReferentialSynchronizeDiffState> referentialSynchronizeDiffStates = optionalRemoveDiffStates.get(); - Set<String> blockingIdsToRemoveFromLocal = localService.filterIdsUsedInLocalSource(referentialName, idsToRemove); + Set<String> idsToRemove = referentialSynchronizeDiffStates.stream().map(ReferentialSynchronizeDiffState::getId).collect(Collectors.toSet()); + Set<String> blockingIdsToRemove = null; - blockingIdsToRemove = idsToRemove - .stream() - .filter(blockingIdsToRemoveFromLocal::contains) - .collect(Collectors.toSet()); + if (CollectionUtils.isNotEmpty(idsToRemove)) { - idsToRemove.removeAll(blockingIdsToRemove); - idsToRemove.forEach(builder::entityToRemove); + Set<String> blockingIdsToRemoveFromLocal = localService.filterIdsUsedInLocalSource(referentialName, idsToRemove); - } + blockingIdsToRemove = idsToRemove + .stream() + .filter(blockingIdsToRemoveFromLocal::contains) + .collect(Collectors.toSet()); - boolean needCallback = CollectionUtils.isNotEmpty(blockingIdsToRemove); + idsToRemove.removeAll(blockingIdsToRemove); + idsToRemove.forEach(builder::entityToRemove); - if (needCallback) { + } + + boolean needCallback = CollectionUtils.isNotEmpty(blockingIdsToRemove); + + if (needCallback) { - ReferentialReferenceSet<R> availableReferenceSet = remoteService.getEnabledReferentialReferenceSet(referentialName); - Set<ReferentialReference<R>> availableReferentials = availableReferenceSet.getReferences(); + ReferentialReferenceSet<R> availableReferenceSet = diffsEngine.getRightEnabledReferentialReferenceSet(referentialName); + Set<ReferentialReference<R>> availableReferentials = availableReferenceSet.getReferences(); - Set<ReferentialReference<R>> blockingReferentialsToRemove = localService.getLocalSourceReferentialToDelete(referentialName, blockingIdsToRemove); + Set<ReferentialReference<R>> blockingReferentialsToRemove = localService.getLocalSourceReferentialToDelete(referentialName, blockingIdsToRemove); - callbackRequests.addCallbackRequest(referentialName, blockingReferentialsToRemove, availableReferentials); + callbackRequests.addCallbackRequest(referentialName, blockingReferentialsToRemove, availableReferentials); + + } + referentialSynchronizeDiffStates.stream().map(ReferentialSynchronizeDiffState::getId).forEach(builder::entityToRemove); } return builder; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java index 0e9f20f..b974b5f 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalService.java @@ -25,7 +25,6 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; -import fr.ird.observe.services.spi.NoDataAccess; import fr.ird.observe.services.spi.PostRequest; import fr.ird.observe.services.spi.ReadReferentialPermission; import fr.ird.observe.services.spi.Write; @@ -43,14 +42,6 @@ import java.util.Set; public interface UnidirectionalReferentialSynchronizeLocalService extends ObserveService { /** - * Récupération sur la source à synchroniser des versions de ses référentiels. - * - * @return les versions de tous les référentiels de la base à synchroniser. - */ - @ReadReferentialPermission - LocalReferentialStates getLocalSourceReferentialStates(); - - /** * Pour un référentiel d'un type donné (son nom est donné), détecte les référentiels dont * les identifiants sont passés en paramètres qui sont réellement utilisés dans la source locale. * @@ -59,19 +50,19 @@ public interface UnidirectionalReferentialSynchronizeLocalService extends Observ * @return les identifiants des référentiels passés en paramètres qui sont réellement utilisés dans la source locale. */ @ReadReferentialPermission - Set<String> filterIdsUsedInLocalSource(String referentialName, Set<String> ids); + <R extends ReferentialDto> Set<String> filterIdsUsedInLocalSource(Class<R> referentialName, Set<String> ids); /** * Pour récupérer les références sur les référentiels d'un certain type à supprimer, * cet ensemble servira à les afficher dans l'interface graphique pour effectuer le remplacement. * - * @param ids les identifiants des référentiels à supprimer - * @param referentialName le nom du référentiel à récupérer * @param <R> type des référentiels à récupérer + * @param referentialName le nom du référentiel à récupérer + * @param ids les identifiants des référentiels à supprimer * @return l'ensemble des références de référentiel à supprimer. */ @ReadReferentialPermission - <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(String referentialName, Set<String> ids); + <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(Class<R> referentialName, Set<String> ids); /** * Pour produire le code sql à partir de la demande pour un référentiel donné. @@ -80,7 +71,7 @@ public interface UnidirectionalReferentialSynchronizeLocalService extends Observ * @param <R> type des référentiels à traiter * @return l'ensemble des requètes sql à appliquer. */ - @NoDataAccess + @ReadReferentialPermission <R extends ReferentialDto> Set<String> generateSqlRequests(UnidirectionalReferentialSynchronizeRequest<R> request); /** diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteService.java deleted file mode 100644 index 849973e..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteService.java +++ /dev/null @@ -1,58 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.legacy; - -/*- - * #%L - * ObServe :: Services API - * %% - * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.services.ObserveService; -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; -import fr.ird.observe.services.spi.ReadReferentialPermission; - -/** - * Service pour effectuer une synchronisation de référentiel unidirectionnelle. - * - * Created on 27/06/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public interface UnidirectionalReferentialSynchronizeRemoteService extends ObserveService { - - /** - * Récupération sur la source centrale du différentiel des référentiel. - * - * @param localReferentialStates les états de référentiel de la source à synchroniser. - * @return le résultat de calcul de différentiel de référentiel. - */ - @ReadReferentialPermission - RemoteReferentialDiff getReferentialDifferential(LocalReferentialStates localReferentialStates); - - /** - * Pour récupérer un ensemble de référentiels non désactivés pour un type donné (et ceci afin de remplacer - * un référentiel de même type supprimé ou désactivé). - * - * @param referentialName le nom du référentiel - * @return l'ensemble des référentiels non désactivés du type demandé - */ - @ReadReferentialPermission - <R extends ReferentialDto> ReferentialReferenceSet<R> getEnabledReferentialReferenceSet(String referentialName); -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRequest.java index 9054a25..fbab2e4 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRequest.java @@ -27,6 +27,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import fr.ird.observe.services.dto.referential.ReferentialDto; +import java.util.Objects; + /** * Pour un référentiel de type donné, l'ensemble des opérations à effectuer. * @@ -39,17 +41,18 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; */ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDto> { - public static <R extends ReferentialDto> Builder<R> builder(String referentialName) { + public static <R extends ReferentialDto> Builder<R> builder(Class<R> referentialName) { + Objects.nonNull(referentialName); return new Builder<>(referentialName); } - private final String referentialName; + private final Class<R> referentialName; private final ImmutableSet<R> referentialToAdd; private final ImmutableSet<R> referentialToUpdate; private final ImmutableSet<String> referentialToRemove; private final ImmutableMap<String, String> referentialToReplace; - public String getReferentialName() { + public Class<R> getReferentialName() { return referentialName; } @@ -88,7 +91,7 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt @Override public String toString() { return MoreObjects.toStringHelper(this) - .add("referentialName", referentialName) + .add("referentialName", referentialName.getName()) .add("referentialToAdd", referentialToAdd.size()) .add("referentialToUpdate", referentialToUpdate.size()) .add("referentialToRemove", referentialToRemove.size()) @@ -96,7 +99,7 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt .toString(); } - private UnidirectionalReferentialSynchronizeRequest(String referentialName, + private UnidirectionalReferentialSynchronizeRequest(Class<R> referentialName, ImmutableSet<R> referentialToAdd, ImmutableSet<R> referentialToUpdate, ImmutableSet<String> referentialToRemove, @@ -110,7 +113,7 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt public static class Builder<R extends ReferentialDto> { - private final String referentialName; + private final Class<R> referentialName; private final ImmutableSet.Builder<R> toAddBuilder = ImmutableSet.builder(); private final ImmutableSet.Builder<R> toUpdateBuilder = ImmutableSet.builder(); private final ImmutableSet.Builder<String> toRemoveBuilder = ImmutableSet.builder(); @@ -136,7 +139,7 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt return this; } - public String getReferentialName() { + public Class<R> getReferentialName() { return referentialName; } @@ -152,7 +155,7 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt } - private Builder(String referentialName) { + private Builder(Class<R> referentialName) { this.referentialName = referentialName; } diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeResult.java index 33f158c..52c46a0 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeResult.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeResult.java @@ -28,9 +28,9 @@ import fr.ird.observe.services.dto.referential.ReferentialDto; import org.apache.commons.lang3.tuple.Pair; import java.util.Collection; +import java.util.LinkedHashSet; 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. @@ -42,14 +42,14 @@ import java.util.TreeSet; */ 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; + private final Set<Class<? extends ReferentialDto>> referentialNames; + private final Multimap<Class<? extends ReferentialDto>, String> referentialAdded; + private final Multimap<Class<? extends ReferentialDto>, String> referentialUpdated; + private final Multimap<Class<? extends ReferentialDto>, Pair<String, String>> referentialReplaced; + private final Multimap<Class<? extends ReferentialDto>, String> referentialRemoved; public UnidirectionalReferentialSynchronizeResult() { - this.referentialNames = new TreeSet<>(); + this.referentialNames = new LinkedHashSet<>(); this.referentialAdded = ArrayListMultimap.create(); this.referentialUpdated = ArrayListMultimap.create(); this.referentialReplaced = ArrayListMultimap.create(); @@ -60,29 +60,29 @@ public class UnidirectionalReferentialSynchronizeResult { return referentialNames.isEmpty(); } - public Set<String> getReferentialNames() { + public Set<Class<? extends ReferentialDto>> getReferentialNames() { return referentialNames; } - public Collection<String> getReferentialAdded(String referentialName) { + public Collection<String> getReferentialAdded(Class<? extends ReferentialDto> referentialName) { return referentialAdded.get(referentialName); } - public Collection<String> getReferentialUpdated(String referentialName) { + public Collection<String> getReferentialUpdated(Class<? extends ReferentialDto> referentialName) { return referentialUpdated.get(referentialName); } - public Collection<Pair<String, String>> getReferentialReplaced(String referentialName) { + public Collection<Pair<String, String>> getReferentialReplaced(Class<? extends ReferentialDto> referentialName) { return referentialReplaced.get(referentialName); } - public Collection<String> getReferentialRemoved(String referentialName) { + public Collection<String> getReferentialRemoved(Class<? extends ReferentialDto> referentialName) { return referentialRemoved.get(referentialName); } void flushRequest(UnidirectionalReferentialSynchronizeRequest<?> referentialSynchronizeRequest) { - String referentialName = referentialSynchronizeRequest.getReferentialName(); + Class<? extends ReferentialDto> referentialName = referentialSynchronizeRequest.getReferentialName(); if (referentialSynchronizeRequest.withReferentialToAdd()) { @@ -118,22 +118,22 @@ public class UnidirectionalReferentialSynchronizeResult { } - private void addReferentialAdded(String referentialName, String id) { + private void addReferentialAdded(Class<? extends ReferentialDto> referentialName, String id) { referentialNames.add(referentialName); referentialAdded.put(referentialName, id); } - private void addReferentialUpdated(String referentialName, String id) { + private void addReferentialUpdated(Class<? extends ReferentialDto> referentialName, String id) { referentialNames.add(referentialName); referentialUpdated.put(referentialName, id); } - private void addReferentialRemoved(String referentialName, String id) { + private void addReferentialRemoved(Class<? extends ReferentialDto> referentialName, String id) { referentialNames.add(referentialName); referentialRemoved.put(referentialName, id); } - private void addReferentialReplaced(String referentialName, String idToReplace, String replaceId) { + private void addReferentialReplaced(Class<? extends ReferentialDto> referentialName, String idToReplace, String replaceId) { referentialNames.add(referentialName); referentialReplaced.put(referentialName, Pair.of(idToReplace, replaceId)); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceTopia.java index ea0d1bc..3e4b2bd 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/diff/ReferentialSynchronizeDiffServiceTopia.java @@ -8,6 +8,8 @@ import fr.ird.observe.entities.constants.ReferenceStatusPersist; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.services.ObserveServiceTopia; 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.dto.referential.ReferentialReferenceSet; import org.apache.commons.logging.Log; @@ -55,6 +57,24 @@ public class ReferentialSynchronizeDiffServiceTopia extends ObserveServiceTopia } @Override + public <R extends ReferentialDto> ImmutableSet<R> getReferentials(Class<R> referentialName, ImmutableSet<String> ids) { + Class<? extends ObserveReferentialEntity> entityType = BinderEngine.get().getReferentialEntityType(referentialName); + return getReferentials0(referentialName, entityType, ids); + } + + private <E extends ObserveReferentialEntity, R extends ReferentialDto> ImmutableSet<R> getReferentials0(Class<R> dtoType, Class<E> entityType, ImmutableSet<String> ids) { + ImmutableSet.Builder<R> result = ImmutableSet.builder(); + ReferentialLocale referentialLocale = getReferentialLocale(); + List<E> entities = loadEntities(entityType, ids); + for (E entity : entities) { + ReferentialBinderSupport<ObserveReferentialEntity, R> binder = BinderEngine.get().getReferentialBinder(dtoType); + result.add(binder.toDto(referentialLocale, entity)); + } + + return result.build(); + } + + @Override public ReferentialDataSourceStates getSourceReferentialStates() { if (log.isTraceEnabled()) { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java index 48f62a4..2c88a67 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeLocalServiceTopia.java @@ -23,7 +23,6 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; */ import fr.ird.observe.ObserveEntityEnum; -import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.binder.BinderEngine; @@ -60,33 +59,12 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser private static final Log log = LogFactory.getLog(UnidirectionalReferentialSynchronizeLocalServiceTopia.class); @Override - public LocalReferentialStates getLocalSourceReferentialStates() { - - if (log.isTraceEnabled()) { - log.trace("getLocalSourceReferentialStates()"); - } - - LocalReferentialStates localReferentialStates = new LocalReferentialStates(); - for (ObserveEntityEnum referenceEntity : Entities.REFERENCE_ENTITIES) { - if (ObserveEntityEnum.LastUpdateDate.equals(referenceEntity)) { - continue; - } - Class entityType = referenceEntity.getContract(); - getLocalSourceReferentialVersions0(referenceEntity.name(), entityType, localReferentialStates); - } - return localReferentialStates; - - } - - @Override - public Set<String> filterIdsUsedInLocalSource(String referentialName, Set<String> ids) { + public <R extends ReferentialDto> Set<String> filterIdsUsedInLocalSource(Class<R> referentialName, Set<String> ids) { if (log.isTraceEnabled()) { log.trace("filterIdsUsedInLocalSource(" + referentialName + ", " + ids + ")"); } - - ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(referentialName); - Class entityType = entityEnum.getContract(); + Class entityType = BinderEngine.get().getReferentialEntityType(referentialName); Set<String> result = new LinkedHashSet<>(); for (String id : ids) { int count = countUsage0(entityType, id); @@ -99,12 +77,10 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } @Override - public <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(String referentialName, Set<String> ids) { + public <R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete(Class<R> referentialName, Set<String> ids) { - ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(referentialName); - Class entityType = entityEnum.getContract(); - Class dtoType = BinderEngine.get().getReferentialDtoType(entityType); - return getLocalSourceReferentialToDelete0(entityType, dtoType, ids); + Class<? extends ObserveReferentialEntity> entityType = BinderEngine.get().getReferentialEntityType(referentialName); + return getLocalSourceReferentialToDelete0(entityType, referentialName, ids); } @@ -117,14 +93,13 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser Set<String> result = new LinkedHashSet<>(); - String referentialName = request.getReferentialName(); - - ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(referentialName); - Class entityType = entityEnum.getContract(); - Class<R> dtoType = BinderEngine.get().getReferentialDtoType(entityType); + Class<R> dtoType = request.getReferentialName(); + Class<ObserveReferentialEntity> entityType = BinderEngine.get().getReferentialEntityType(dtoType); + ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(entityType); + String referentielName = entityEnum.name(); TopiaMetadataModel metadataModel = serviceContext.getTopiaApplicationContext().getMetadataModel(); - TopiaMetadataEntity metadataEntity = metadataModel.getEntity(referentialName); + TopiaMetadataEntity metadataEntity = metadataModel.getEntity(referentielName); if (request.withReferentialToAdd()) { InsertSqlStatementGenerator<R> sqlStatementGenerator = new InsertSqlStatementGenerator<>(metadataEntity, dtoType); @@ -136,7 +111,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser if (request.withReferentialToUpdate()) { - UpdateSqlStatementGenerator<R> sqlStatementGenerator = new UpdateSqlStatementGenerator<R>(metadataEntity, dtoType); + UpdateSqlStatementGenerator<R> sqlStatementGenerator = new UpdateSqlStatementGenerator<>(metadataEntity, dtoType); for (R referentialDto : request.getReferentialToUpdate()) { String sql = sqlStatementGenerator.generateSql(referentialDto); result.add(sql); @@ -146,7 +121,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser if (request.withReferentialToReplace()) { - ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentialName); + ReplaceSqlStatementGenerator sqlStatementGenerator = new ReplaceSqlStatementGenerator(metadataModel, referentielName); for (Map.Entry<String, String> entry : request.getReferentialToReplace().entrySet()) { String sql = sqlStatementGenerator.generateSql(entry.getKey(), entry.getValue()); result.add(sql); @@ -180,15 +155,6 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } - private <E extends ObserveReferentialEntity> void getLocalSourceReferentialVersions0(String entityName, Class<E> entityType, LocalReferentialStates localReferentialStates) { - - TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); - for (E e : dao) { - localReferentialStates.addReferentialVersion(entityName, e.getTopiaId(), e.getTopiaVersion(), e.isDisabled()); - } - - } - private <E extends ObserveReferentialEntity> int countUsage0(Class<E> entityType, String id) { TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); @@ -202,7 +168,7 @@ public class UnidirectionalReferentialSynchronizeLocalServiceTopia extends Obser } - private <E extends ObserveReferentialEntity, R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete0(Class<E> entityType,Class<R> dtoType, Set<String> ids) { + private <E extends ObserveReferentialEntity, R extends ReferentialDto> Set<ReferentialReference<R>> getLocalSourceReferentialToDelete0(Class<E> entityType, Class<R> dtoType, Set<String> ids) { TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); List<E> entities = dao.forTopiaIdIn(ids).findAll(); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java deleted file mode 100644 index 1b0f4b2..0000000 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/legacy/UnidirectionalReferentialSynchronizeRemoteServiceTopia.java +++ /dev/null @@ -1,147 +0,0 @@ -package fr.ird.observe.services.service.actions.synchro.referential.legacy; - -/*- - * #%L - * ObServe :: Services ToPIA Implementation - * %% - * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.ObserveEntityEnum; -import fr.ird.observe.ObserveTopiaPersistenceContext; -import fr.ird.observe.entities.Entities; -import fr.ird.observe.entities.constants.ReferenceStatusPersist; -import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; -import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.binder.BinderEngine; -import fr.ird.observe.services.dto.constants.ReferentialLocale; -import fr.ird.observe.services.dto.referential.ReferentialDto; -import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaDao; - -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Created on 27/06/16. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 5.0 - */ -public class UnidirectionalReferentialSynchronizeRemoteServiceTopia extends ObserveServiceTopia implements UnidirectionalReferentialSynchronizeRemoteService { - - /** Logger. */ - private static final Log log = LogFactory.getLog(UnidirectionalReferentialSynchronizeRemoteServiceTopia.class); - - @Override - public RemoteReferentialDiff getReferentialDifferential(LocalReferentialStates localReferentialStates) { - - if (log.isTraceEnabled()) { - log.trace("getReferentialDifferential(" + localReferentialStates + ")"); - } - - RemoteReferentialDiff result = new RemoteReferentialDiff(); - for (ObserveEntityEnum referenceEntity : Entities.REFERENCE_ENTITIES) { - if (ObserveEntityEnum.LastUpdateDate.equals(referenceEntity)) { - continue; - } - Class entityType = referenceEntity.getContract(); - getReferentialDifferential0(referenceEntity.name(), entityType, localReferentialStates, result); - } - return result; - - } - - @Override - public <R extends ReferentialDto> ReferentialReferenceSet<R> getEnabledReferentialReferenceSet(String referentialName) { - - if (log.isTraceEnabled()) { - log.trace("getEnabledReferentialReferenceSet(" + referentialName + ")"); - } - - ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(referentialName); - Class entityType = entityEnum.getContract(); - Class dtoType = BinderEngine.get().getReferentialDtoType(entityType); - ReferentialReferenceSet<R> result = getLocalSourceEnabledReferenceSet0(entityType, dtoType); - return result; - - } - - - private <E extends ObserveReferentialEntity> void getReferentialDifferential0(String entityName, Class<E> entityType, LocalReferentialStates localReferentialStates, RemoteReferentialDiff result) { - - ReferentialLocale referentialLocale = getReferentialLocale(); - BinderEngine binderEngine = BinderEngine.get(); -// Class<ReferentialDto> referentialDtoType = binderEngine.getReferentialDtoType(entityType); - Map<String, Long> localReferentialVersions = localReferentialStates.getReferentialVersions(entityName); -// Collection<String> localReferentialDisabled = localReferentialStates.getReferentialDisabled(entityName); - TopiaDao<E> dao = getTopiaPersistenceContext().getDao(entityType); - for (E centralReferentialEntity : dao) { - - String id = centralReferentialEntity.getTopiaId(); - Long localVersion = localReferentialVersions == null ? null : localReferentialVersions.get(id); - - if (localVersion == null) { - - // nouvelle entité - ReferentialDto dto = binderEngine.transformEntityToReferentialDto(referentialLocale, centralReferentialEntity); - result.addReferentialToAdd(entityName, dto); - continue; - } - - long centralVersion = centralReferentialEntity.getTopiaVersion(); - - if (centralVersion > localVersion) { - - // entité à mettre à jour - ReferentialDto dto = binderEngine.transformEntityToReferentialDto(referentialLocale, centralReferentialEntity); - result.addReferentialToUpdate(entityName, dto); - } - - } - - // entités supprimées - Set<String> idsToDelete = localReferentialVersions == null ? new LinkedHashSet<>() : new LinkedHashSet<>(localReferentialVersions.keySet()); - - List<String> centralIds = dao.findAllIds(); - idsToDelete.removeAll(centralIds); - - for (String id : idsToDelete) { - - // entité supprimée, il faudra que l'utilisateur la change - result.addReferentialToDelete(entityName, id); - } - - } - - private <E extends ObserveReferentialEntity, R extends ReferentialDto> ReferentialReferenceSet<R> getLocalSourceEnabledReferenceSet0(Class<E> entityType, Class<R> dtoType) { - - ObserveTopiaPersistenceContext persistenceContext = getTopiaPersistenceContext(); - TopiaDao<E> dao = persistenceContext.getDao(entityType); - List<E> entities = dao.forEquals(ObserveReferentialEntity.PROPERTY_STATUS, ReferenceStatusPersist.enabled).findAll(); - ReferentialReferenceSet<R> result = toReferentialReferenceSet(dtoType, entities, null); - return result; - - } - - -} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java index fd25ccd..429a2f7 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/sql/InsertSqlStatementGenerator.java @@ -117,8 +117,8 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { String dbColumnName = metadataEntity.getDbColumnName(propertyName); String tableName = metadataEntity.getBdManyToManyAssociationTableName(propertyName); String typeName = entry.getValue(); - Class entityType = ObserveEntityEnum.valueOf(typeName).getContract(); - Class<? extends ReferentialDto> referentialype = BinderEngine.get().getReferentialDtoType(entityType); + ObserveEntityEnum entityEnum = ObserveEntityEnum.valueOf(typeName); + Class<? extends ReferentialDto> referentialype = BinderEngine.get().getReferentialDtoType(entityEnum); ManyToManyAssociationStruct manyToManyAssociation = new ManyToManyAssociationStruct(propertyName, dbColumnName, tableName, referentialype); manyToManyAssociations.add(manyToManyAssociation); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.