branch feature/7677_action_export_donnees_server_distant created (now eab2d46)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7677_action_export_donnees_server_distant in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git at eab2d46 Remplace ImmutableSet<ReferentilDto> par des ReferntialMultimap dans UnidirectionalReferentialSynchronizeRequest afin de permettre la deserialisation de cet objet This branch includes the following new commits: new eab2d46 Remplace ImmutableSet<ReferentilDto> par des ReferntialMultimap dans UnidirectionalReferentialSynchronizeRequest afin de permettre la deserialisation de cet objet 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 eab2d46d090eb6fdbac18a555896560e6d363688 Author: Samuel Maisonneuve <maisonneuve@codelutin.com> Date: Tue Aug 23 18:21:24 2016 +0200 Remplace ImmutableSet<ReferentilDto> par des ReferntialMultimap dans UnidirectionalReferentialSynchronizeRequest afin de permettre la deserialisation de cet objet refs #7677 -- 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/7677_action_export_donnees_server_distant in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit eab2d46d090eb6fdbac18a555896560e6d363688 Author: Samuel Maisonneuve <maisonneuve@codelutin.com> Date: Tue Aug 23 18:21:24 2016 +0200 Remplace ImmutableSet<ReferentilDto> par des ReferntialMultimap dans UnidirectionalReferentialSynchronizeRequest afin de permettre la deserialisation de cet objet refs #7677 --- .../web/ObserveWebApplicationListener.java | 2 + ...tionalReferntialSynchronizeRequestInjector.java | 75 ++++++++++++++++++++++ ...nidirectionalReferentialSynchronizeRequest.java | 32 ++++++--- .../dto/gson/ReferentialMultimapAdapter.java | 5 +- .../dto/referential/ReferentialMultimap.java | 29 +++++++++ .../ReferentialSynchronizeDiffServiceTopia.java | 5 +- 6 files changed, 134 insertions(+), 14 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java index f4bd444..b6b757c 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/ObserveWebApplicationListener.java @@ -31,6 +31,7 @@ import fr.ird.observe.application.web.injector.ObserveDataSourceConfigurationInj import fr.ird.observe.application.web.injector.ObserveDtoInjector; import fr.ird.observe.application.web.injector.ObserveReferenceSetRequestInjector; import fr.ird.observe.application.web.injector.SqlScriptProducerRequestInjector; +import fr.ird.observe.application.web.injector.UnidirectionalReferntialSynchronizeRequestInjector; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRestConstants; import fr.ird.observe.services.dto.ObserveDbUserDto; import org.apache.commons.logging.Log; @@ -71,6 +72,7 @@ public class ObserveWebApplicationListener implements WebMotionServerListener { context.addInjector(new DateInjector(ObserveDataSourceConfigurationRestConstants.DATE_PATTERN)); context.addInjector(new SqlScriptProducerRequestInjector(gson)); context.addInjector(new ImmutableSetInjector()); + context.addInjector(new UnidirectionalReferntialSynchronizeRequestInjector(gson)); context.addConverter(new ObserveDtoConverter(gson), ObserveDbUserDto.class); context.getServletContext().setAttribute( diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/UnidirectionalReferntialSynchronizeRequestInjector.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/UnidirectionalReferntialSynchronizeRequestInjector.java new file mode 100644 index 0000000..59f0ad6 --- /dev/null +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/injector/UnidirectionalReferntialSynchronizeRequestInjector.java @@ -0,0 +1,75 @@ +package fr.ird.observe.application.web.injector; + +/*- + * #%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 com.google.common.base.Preconditions; +import com.google.gson.Gson; +import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeRequest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.debux.webmotion.server.call.Call; +import org.debux.webmotion.server.handler.ExecutorParametersInjectorHandler; +import org.debux.webmotion.server.mapping.Mapping; + +import java.lang.reflect.Type; + +/** + * @author Samuel Maisonneuve - maisonneuve@codelutin.com + */ +public class UnidirectionalReferntialSynchronizeRequestInjector implements ExecutorParametersInjectorHandler.Injector { + + /** Logger. */ + private static final Log log = LogFactory.getLog(UnidirectionalReferntialSynchronizeRequestInjector.class); + + protected final Gson gson; + + public UnidirectionalReferntialSynchronizeRequestInjector(Gson gson) { + this.gson = gson; + } + + @Override + public Object getValue(Mapping mapping, Call call, String name, Class<?> type, Type generic) { + + UnidirectionalReferentialSynchronizeRequest result = null; + + if (type.equals(UnidirectionalReferentialSynchronizeRequest.class)) { + + Call.ParameterTree parameterTree = call.getParameterTree().getObject().get(name); + + Preconditions.checkNotNull(parameterTree, "Le paramètre " + name + " n'as pas été trouvé, recompiler (parameter)!"); + + String gsonContent = ((String[]) parameterTree.getValue())[0]; + + result = gson.fromJson(gsonContent, UnidirectionalReferentialSynchronizeRequest.class); + + if (log.isInfoEnabled()) { + log.info("Inject UnidirectionalReferntialSynchronizeRequestInjector: " + result); + } + + } + + return result; + + } + +} 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 fbab2e4..4ec070a 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 @@ -25,7 +25,9 @@ package fr.ird.observe.services.service.actions.synchro.referential.legacy; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Multiset; import fr.ird.observe.services.dto.referential.ReferentialDto; +import fr.ird.observe.services.dto.referential.ReferentialMultimap; import java.util.Objects; @@ -47,8 +49,8 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt } private final Class<R> referentialName; - private final ImmutableSet<R> referentialToAdd; - private final ImmutableSet<R> referentialToUpdate; + private final ReferentialMultimap<R> referentialToAdd; + private final ReferentialMultimap<R> referentialToUpdate; private final ImmutableSet<String> referentialToRemove; private final ImmutableMap<String, String> referentialToReplace; @@ -57,11 +59,25 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt } public ImmutableSet<R> getReferentialToAdd() { - return referentialToAdd; + ImmutableSet<R> result = new ImmutableSet.Builder().build(); + + Multiset<Class<R>> entries = referentialToAdd.keys(); + if (!entries.isEmpty()) { + result = referentialToAdd.get(entries.iterator().next()); + } + + return result; } public ImmutableSet<R> getReferentialToUpdate() { - return referentialToUpdate; + ImmutableSet<R> result = new ImmutableSet.Builder().build(); + + Multiset<Class<R>> entries = referentialToUpdate.keys(); + if (!entries.isEmpty()) { + result = referentialToUpdate.get(entries.iterator().next()); + } + + return result; } public ImmutableSet<String> getReferentialToRemove() { @@ -100,8 +116,8 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt } private UnidirectionalReferentialSynchronizeRequest(Class<R> referentialName, - ImmutableSet<R> referentialToAdd, - ImmutableSet<R> referentialToUpdate, + ReferentialMultimap<R> referentialToAdd, + ReferentialMultimap<R> referentialToUpdate, ImmutableSet<String> referentialToRemove, ImmutableMap<String, String> toReplace) { this.referentialName = referentialName; @@ -114,8 +130,8 @@ public class UnidirectionalReferentialSynchronizeRequest<R extends ReferentialDt public static class Builder<R extends ReferentialDto> { private final Class<R> referentialName; - private final ImmutableSet.Builder<R> toAddBuilder = ImmutableSet.builder(); - private final ImmutableSet.Builder<R> toUpdateBuilder = ImmutableSet.builder(); + private final ReferentialMultimap.Builder<R> toAddBuilder = ReferentialMultimap.builder(); + private final ReferentialMultimap.Builder<R> toUpdateBuilder = ReferentialMultimap.builder(); private final ImmutableSet.Builder<String> toRemoveBuilder = ImmutableSet.builder(); private final ImmutableMap.Builder<String, String> toReplaceBuilder = ImmutableMap.builder(); diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ReferentialMultimapAdapter.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ReferentialMultimapAdapter.java index 516a255..bd1b59d 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ReferentialMultimapAdapter.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/gson/ReferentialMultimapAdapter.java @@ -22,7 +22,6 @@ package fr.ird.observe.services.dto.gson; * #L% */ -import com.google.common.collect.ImmutableSetMultimap; import com.google.common.reflect.TypeParameter; import com.google.common.reflect.TypeToken; import com.google.gson.JsonDeserializationContext; @@ -53,7 +52,7 @@ public class ReferentialMultimapAdapter implements JsonSerializer<ReferentialMul @Override public ReferentialMultimap deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { - ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); + ReferentialMultimap.Builder builder = ReferentialMultimap.builder(); Set<Map.Entry<String, JsonElement>> entries = json.getAsJsonObject().entrySet(); for (Map.Entry<String, JsonElement> entry : entries) { @@ -72,7 +71,7 @@ public class ReferentialMultimapAdapter implements JsonSerializer<ReferentialMul builder.putAll(key, values); } - return ReferentialMultimap.copyOf(builder.build()); + return builder.build(); } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialMultimap.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialMultimap.java index 1d1fb78..451b27f 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialMultimap.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/referential/ReferentialMultimap.java @@ -22,6 +22,7 @@ package fr.ird.observe.services.dto.referential; * #L% */ +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSetMultimap; @@ -52,6 +53,34 @@ public class ReferentialMultimap<K extends ReferentialDto> implements SetMultima return new ReferentialMultimap(multimap); } + public static <K extends ReferentialDto> Builder<K> builder() { + return new Builder<>(); + } + + public static class Builder<K extends ReferentialDto> { + private final ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); + + public <K extends ReferentialDto> Builder add(K referentialDto) { + Preconditions.checkNotNull(referentialDto, "Can't add a null object in ReferentialMultimap"); + builder.put(referentialDto.getClass(), referentialDto); + return this; + } + + public <K extends ReferentialDto> Builder put(Class<K> dtoType, K referentialDto) { + builder.putAll(dtoType, referentialDto); + return this; + } + + public <K extends ReferentialDto> Builder putAll(Class<K> dtoType, Collection<K> values) { + builder.putAll(dtoType, values); + return this; + } + + public ReferentialMultimap<K> build() { + return copyOf(builder.build()); + } + } + private ReferentialMultimap() { immutableSetMultimap = ImmutableSetMultimap.<Class<K>, K>builder().build(); } 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 b4f701a..e83e77e 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 @@ -1,7 +1,6 @@ package fr.ird.observe.services.service.actions.synchro.referential.diff; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSetMultimap; import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.Entities; @@ -65,7 +64,7 @@ public class ReferentialSynchronizeDiffServiceTopia extends ObserveServiceTopia } private <E extends ObserveReferentialEntity, R extends ReferentialDto> ReferentialMultimap<R> getReferentials0(Class<R> dtoType, Class<E> entityType, ImmutableSet<String> ids) { - ImmutableSetMultimap.Builder<Class<R>, R> result = ImmutableSetMultimap.builder(); + ReferentialMultimap.Builder<R> result = ReferentialMultimap.builder(); ReferentialLocale referentialLocale = getReferentialLocale(); List<E> entities = loadEntities(entityType, ids); for (E entity : entities) { @@ -73,7 +72,7 @@ public class ReferentialSynchronizeDiffServiceTopia extends ObserveServiceTopia result.put(dtoType, binder.toDto(referentialLocale, entity)); } - return ReferentialMultimap.copyOf(result.build()); + return result.build(); } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm