branch feature/4309_correction_synchro_ref_avancee_serveur_distant updated (309acb4 -> 38a6aa9)
This is an automated email from the git hooks/post-receive script. New change to branch feature/4309_correction_synchro_ref_avancee_serveur_distant in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git from 309acb4 Corrige typo new 38a6aa9 Corrige les erreurs liées à la sérialisation/deserialisation des objets The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 38a6aa9e3719ac691b4f46ff2c11eae3a005c8e2 Author: Samuel Maisonneuve <maisonneuve@codelutin.com> Date: Fri Aug 26 18:39:06 2016 +0200 Corrige les erreurs liées à la sérialisation/deserialisation des objets Introduit notamment un ImmutableMultimapAdapter refs #4309 Summary of changes: .../diff/ReferentialSynchronizeDiffService.java | 1 + .../ng/ReferentialSynchronizeRequest.java | 9 ++--- ...entialSynchronizeServiceProduceSqlsRequest.java | 3 +- ...rentialSynchronizeServiceProduceSqlsResult.java | 4 ++- .../ng/ReferentialSynchronizeSqlsRequest.java | 3 +- ...pAdapter.java => ImmutableMultimapAdapter.java} | 38 ++++++++++++++++++---- .../services/dto/gson/ObserveDtoGsonSupplier.java | 2 ++ 7 files changed, 46 insertions(+), 14 deletions(-) copy observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/{ImmutableMapAdapter.java => ImmutableMultimapAdapter.java} (56%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/4309_correction_synchro_ref_avancee_serveur_distant in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 38a6aa9e3719ac691b4f46ff2c11eae3a005c8e2 Author: Samuel Maisonneuve <maisonneuve@codelutin.com> Date: Fri Aug 26 18:39:06 2016 +0200 Corrige les erreurs liées à la sérialisation/deserialisation des objets Introduit notamment un ImmutableMultimapAdapter refs #4309 --- .../diff/ReferentialSynchronizeDiffService.java | 1 + .../ng/ReferentialSynchronizeRequest.java | 9 ++- ...entialSynchronizeServiceProduceSqlsRequest.java | 3 +- ...rentialSynchronizeServiceProduceSqlsResult.java | 4 +- .../ng/ReferentialSynchronizeSqlsRequest.java | 3 +- .../dto/gson/ImmutableMultimapAdapter.java | 85 ++++++++++++++++++++++ .../services/dto/gson/ObserveDtoGsonSupplier.java | 2 + 7 files changed, 100 insertions(+), 7 deletions(-) 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 c19fa4a..e1a98d4 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 @@ -18,6 +18,7 @@ public interface ReferentialSynchronizeDiffService extends ObserveService { @ReadReferentialPermission <R extends ReferentialDto> ReferentialReferenceSet<R> getEnabledReferentialReferenceSet(Class<R> referentialName); + @PostRequest @ReadReferentialPermission <R extends ReferentialDto> ReferentialReferenceSet<R> getReferentialReferenceSet(Class<R> referentialName, ImmutableSet<String> ids); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java index 240d2cb..6a4f0fe 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeRequest.java @@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.Multimap; +import fr.ird.observe.services.dto.ObserveDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTask; import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTaskType; @@ -20,18 +21,18 @@ import java.util.stream.Collectors; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class ReferentialSynchronizeRequest { +public class ReferentialSynchronizeRequest implements ObserveDto { /** Logger. */ private static final Log log = LogFactory.getLog(ReferentialSynchronizeRequest.class); private final ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> tasks; private final ImmutableSet<Class<? extends ReferentialDto>> types; - private final Multimap<Class<? extends ReferentialDto>, String> idsOnlyExistingOnThisSide; + private final ImmutableSetMultimap<Class<? extends ReferentialDto>, String> idsOnlyExistingOnThisSide; private ReferentialSynchronizeRequest(ImmutableMultimap<ReferentialSynchronizeTaskType, ReferentialSynchronizeTask<?>> tasks, ImmutableSet<Class<? extends ReferentialDto>> types, - Multimap<Class<? extends ReferentialDto>, String> idsOnlyExistingOnThisSide) { + ImmutableSetMultimap<Class<? extends ReferentialDto>, String> idsOnlyExistingOnThisSide) { this.tasks = tasks; this.types = types; this.idsOnlyExistingOnThisSide = idsOnlyExistingOnThisSide; @@ -93,7 +94,7 @@ public class ReferentialSynchronizeRequest { } public ReferentialSynchronizeRequest build() { - return new ReferentialSynchronizeRequest(tasksBuilder.build(), typesBuilder.build(), idsOnlyExistingOnThisSide); + return new ReferentialSynchronizeRequest(tasksBuilder.build(), typesBuilder.build(), ImmutableSetMultimap.copyOf(idsOnlyExistingOnThisSide)); } public <R extends ReferentialDto> Builder addTask(ReferentialSynchronizeTaskType taskType, Class<R> type, String referentialId, String replaceReferentialId) { diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java index 9362c29..d976d7b 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsRequest.java @@ -1,6 +1,7 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; import com.google.common.collect.ImmutableSetMultimap; +import fr.ird.observe.services.dto.ObserveDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.service.actions.synchro.referential.ng.task.ReferentialSynchronizeTaskType; @@ -11,7 +12,7 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public class ReferentialSynchronizeServiceProduceSqlsRequest { +public class ReferentialSynchronizeServiceProduceSqlsRequest implements ObserveDto { private final ReferentialSynchronizeRequest leftRequest; private final ReferentialSynchronizeRequest rightRequest; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java index e495f4f..43a4e95 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeServiceProduceSqlsResult.java @@ -1,11 +1,13 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; +import fr.ird.observe.services.dto.ObserveDto; + /** * Created on 15/08/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class ReferentialSynchronizeServiceProduceSqlsResult { +public class ReferentialSynchronizeServiceProduceSqlsResult implements ObserveDto { protected final ReferentialSynchronizeSqlsRequest leftRequest; protected final ReferentialSynchronizeSqlsRequest rightRequest; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java index b3ac9b9..8b4300a 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/actions/synchro/referential/ng/ReferentialSynchronizeSqlsRequest.java @@ -1,5 +1,6 @@ package fr.ird.observe.services.service.actions.synchro.referential.ng; +import fr.ird.observe.services.dto.ObserveDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -9,7 +10,7 @@ import org.apache.commons.logging.LogFactory; * @author Tony Chemit - chemit@codelutin.com * @since 5.0 */ -public class ReferentialSynchronizeSqlsRequest { +public class ReferentialSynchronizeSqlsRequest implements ObserveDto { /** Logger. */ private static final Log log = LogFactory.getLog(ReferentialSynchronizeSqlsRequest.class); diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ImmutableMultimapAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ImmutableMultimapAdapter.java new file mode 100644 index 0000000..1888d0c --- /dev/null +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ImmutableMultimapAdapter.java @@ -0,0 +1,85 @@ +package fr.ird.observe.services.dto.gson; + +/* + * #%L + * ObServe :: Services model + * %% + * Copyright (C) 2008 - 2015 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.ImmutableMultimap; +import com.google.common.reflect.TypeParameter; +import com.google.common.reflect.TypeToken; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * @author Samuel Maisonneuve - maisonneuve@codelutin.com + */ +public class ImmutableMultimapAdapter implements JsonSerializer<ImmutableMultimap>, JsonDeserializer<ImmutableMultimap> { + + + @Override + public JsonElement serialize(ImmutableMultimap src, Type typeOfSrc, JsonSerializationContext context) { + return context.serialize(src.asMap()); + } + + @Override + public ImmutableMultimap deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { + + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + + Type[] actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments(); + Type keyType = actualTypeArguments[0]; + Type valueType = actualTypeArguments[1]; + + Type type2 = mapOf(TypeToken.of(keyType), TypeToken.of(valueType)).getType(); + Map map = context.deserialize(json, type2); + + for (Object key : map.keySet()) { + Object multimapKeyType = ((Class) keyType).cast(key); + List multimapValues = (List) map.get(key); + + for (Object multimapValue : multimapValues) { + builder.put(multimapKeyType, multimapValue); + } + } + + ImmutableMultimap result = builder.build(); + return result; + + } + + + static <K, V> TypeToken<Map<K, Collection<V>>> mapOf(TypeToken<K> keyType, TypeToken<V> valueType) { + return new TypeToken<Map<K, Collection<V>>>() {} + .where(new TypeParameter<K>() {}, keyType) + .where(new TypeParameter<V>() {}, valueType); + } + +} diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java index a152b7e..c7202a6 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ObserveDtoGsonSupplier.java @@ -25,6 +25,7 @@ package fr.ird.observe.services.dto.gson; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableSet; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -96,6 +97,7 @@ public class ObserveDtoGsonSupplier implements Supplier<Gson> { gsonBuilder.registerTypeAdapter(ImmutableList.class, new ImmutableListAdapter()); gsonBuilder.registerTypeAdapter(ImmutableSet.class, new ImmutableSetAdapter()); gsonBuilder.registerTypeAdapter(ImmutableMap.class, new ImmutableMapAdapter()); + gsonBuilder.registerTypeAdapter(ImmutableMultimap.class, new ImmutableMultimapAdapter()); gsonBuilder.registerTypeAdapter(DataReference.class, new DataReferenceAdapter()); gsonBuilder.registerTypeAdapter(ReferentialReference.class, new ReferentialReferenceAdapter()); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm